DropShadowEffect应用于子元素-Silverlight XAML

DropShadowEffect应用于子元素-Silverlight XAML,silverlight,xaml,dropshadow,Silverlight,Xaml,Dropshadow,我有一个ItemsControl,它包含一些嵌套的容器。我想在主ItemsControl的每个元素周围添加一个dropshadow。而是将其添加到主ItemsControl中的某些容器中(创建阴影行)。我已经把效果放在了许多不同的层面上,但它没有带来任何变化。我从主ItemsControl中项目的最外层容器开始,然后从那里向上移动 这里是我当前放置的放置阴影效果的位置: <ItemsControl > <ItemsControl.ItemsPanel>

我有一个ItemsControl,它包含一些嵌套的容器。我想在主ItemsControl的每个元素周围添加一个dropshadow。而是将其添加到主ItemsControl中的某些容器中(创建阴影行)。我已经把效果放在了许多不同的层面上,但它没有带来任何变化。我从主ItemsControl中项目的最外层容器开始,然后从那里向上移动

这里是我当前放置的放置阴影效果的位置:

<ItemsControl  >
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <!-- I have tried adding the dropshadow effect within this stackpanel -->
            <StackPanel />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <!-- Where I define the dropshadow -->
    <ItemsControl.Effect>
        <DropShadowEffect BlurRadius="0" ShadowDepth="1" Color="LightGray"/>
    </ItemsControl.Effect>
    <!-- End of dropshadow definition -->    

    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <media:Step5Item />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

这是Step5Item的定义,我添加了阴影出现位置的文档:(编辑)我删除了元素的内容,因为那只是样式等等

<!-- This is inserted by the above code's DataTemplate -->
<!-- I have tried adding a border here and giving it a dropshadow effect -->
<Grid >

    <!-- I have tried inserting a dropshadow effect here -->

    <TextBlock Grid.Row="0"/>

    <Border BorderBrush="LightGray" BorderThickness="1" >
        <!-- I have tried inserting a dropshadow effect here -->
        <Grid>
            <Border >
                <!-- There is a shadow around this border/grid -->
                <Grid Grid.Row="0" >
                    <TextBlock Grid.Column="0" />
                    <Button Grid.Column="2"/>

                </Grid>
            </Border>

            <!--There is a shadow around each element in this ItemsControl-->
            <ItemsControl Grid.Row="2" >
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Grid Margin="0,0,0,4" >
                            <Path Grid.Row="0">
                                <Path.Data>
                                    <LineGeometry StartPoint="0,0" EndPoint="1500,0"/>
                                </Path.Data>
                            </Path>
                            <Grid Grid.Row="1">
                                <Image Grid.Column="0" />
                            </Grid>
                        </Grid>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </Grid>
    </Border>
</Grid>

底部还有一个阴影,但我不知道它是来自ItemsControl中的最后一个元素,还是来自最外层的边框

如果您愿意,我可以进一步清理第二个代码段。我拿出了一些东西,但留在了元素中,我想这可能对可读性最好

编辑 我尝试在添加子元素后应用该效果,希望在效果发挥作用之前创建它们,这样问题就不会发生。我尝试将效果放置在主项控件的底部以及Step5Item中最外层网格的底部。我还删除了Step5Item中的一些内容,希望它更可读

EDIT2

这里有两张有效果和没有效果的图片。我把DropShadow代码放在了上面的位置,尽管正如我所说,我可以将它放在许多地方以获得相同的效果

带阴影

无阴影

编辑3

这是我在Erno的解决方案中使用的边框和阴影效果。我希望能够增加一些阴影深度,因为右侧没有阴影,只有底部。当前,如果我更改阴影深度,它将更改为阴影的位置,距离等于新大小,但厚度仅为1

<Border Margin="0,1,0,0" Height="auto" Width="auto" CornerRadius="5,5,5,5"    BorderThickness="1" BorderBrush="LightGray">
    <Border.Effect>
        <DropShadowEffect BlurRadius="0" ShadowDepth="1" Direction="315" Color="LightGray"/>
    </Border.Effect>
</Border>

您是否尝试过执行以下操作

我添加了另一个网格,并添加了一个具有相同效果的同级边框。包含行的网格显示在其顶部,但不是边框的子控件

        <ItemsControl Grid.Row="2" >
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Grid Margin="0,0,0,4" >

                        <Grid> 
                            <Border>
                                <Border.Effect>
                                    <DropShadow />
                                </Border.Effect>
                            </Border>

                            <Path Grid.Row="0">
                                <Path.Data>
                                    <LineGeometry StartPoint="0,0" EndPoint="1500,0"/>
                                </Path.Data>
                            </Path>
                            <Grid Grid.Row="1">
                                <Image Grid.Column="0" />
                            </Grid>
                        </Grid>
                    </Grid>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>


你能发布一些屏幕截图来澄清问题吗?我还不明白问题所在。你能把代码精简一下吗?@Erno我拿了把斧头。差不多只剩下几个集装箱了。要了解问题所在,请查看图像中的水平线。我试图得到一个只有两个容器外部有阴影的效果。取而代之的是,这两个容器中的每一行都有一个边框。我还在代码中添加了注释,在那里我尝试添加了dropshadow效果(所有的效果与我看到的完全相同)。经过大量的修改,我最终想到了大部分都可以工作。我把它放在其他地方(您的解决方案让它在每个ItemControl对象上重复,我希望它围绕整个对象)。但出于某种原因,当我通过shadowDepth增加dropshadow的大小,而不是得到3、4、9等大小的实体阴影时。我得到一个大小为1的阴影,但距离很远,表明我输入的数字被使用了。我正在用我正在使用的代码更新问题的底部,如果您有任何见解,请告诉我。@StephenT,您可以给Border和Grid兄弟姐妹更大的余量。这会给阴影更多的空间,还是我不明白新问题是什么?@Stephen,明白了,边框缺少背景色。没有背景=>没有阴影。啊,好吧,这解释了我看到的一些行为(这是一条直线的实际阴影,我认为它们的效果并不是那么字面)。重叠对象的宽度似乎仍然比边框宽一点,但当我调整边距时,一个边距会调整到另一个边距。我想我只是要添加第二个边框来获得我想要的效果。我花了2个小时给一件事加上阴影,也许是时候在其他方面多做点努力了。谢谢你的帮助,这让我发疯了。