【问题标题】:DropShadowEffect applying to child elements - Silverlight XAMLDropShadowEffect 应用于子元素 - Silverlight XAML
【发布时间】:2011-08-02 21:23:34
【问题描述】:

我有一个 ItemsControl,其中包含一些嵌套容器。我想在主 ItemsControl 的每个元素周围添加一个阴影。但相反,它将它添加到主 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 中的最后一个元素还是来自最外面的边框。

如果您愿意,我可以进一步清理第二段代码。我取出了一些东西,但留在了元素中,认为这可能最有利于可读性。

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

EDIT2

这里有两张有效果和没有效果的图片。我将 DropShadow 代码留在了我将它放在上面的位置,尽管就像我说的那样,我可以将它放在很多地方以获得相同的效果。

带阴影

没有阴影

Without Error http://img402.imageshack.us/img402/1456/nodropshadowexample.png

编辑 3

这是我在 Erno 的解决方案中使用的边框和阴影效果。我希望能够进一步增加阴影深度,因为右侧没有任何阴影,只有底部。目前,如果我更改 ShadowDepth,它会将阴影的位置更改为距离等于新尺寸的距离,但它的厚度仅为 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>

【问题讨论】:

  • 你能发一些屏幕截图来澄清问题吗?
  • 我还不明白这个问题。你能精简代码吗?
  • @Erno 我拿了一把斧头。它几乎只剩下容器了。对于问题是什么,请查看图像中的水平线。我试图获得只有两个容器的外部有 DropShadows 的效果。相反,这两个容器中的每一行都有一个边框。
  • 我还刚刚在我的代码中添加了 cmets,用于我尝试添加阴影效果的位置(所有结果与我看到的完全相同)。

标签: silverlight xaml dropshadow


【解决方案1】:

您是否尝试过以下操作?

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

        <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>

【讨论】:

  • 经过大量返工后,我最终得到了大部分工作的想法。我把它放在其他地方(你的解决方案让它与每个 ItemControl 对象重复,我想要它围绕整个事物)。但是由于某种原因,当我通过 shadowDepth 增加阴影的大小而不是获得大小为 3、4、9 等的实心阴影时。我得到一个大小为 1 的阴影,但距离很远,这表明我输入的数字已被使用。我正在使用我正在使用的代码更新问题的底部,如果您有任何见解,请告诉我。
  • @StephenT,您可以给 Border 和 Grid 兄弟姐妹更大的边距。这会给影子更多的空间,还是我不明白新问题是什么?
  • @Stephen,知道了,边框缺少背景颜色。没有背景 => 没有阴影。
  • 啊,好吧,这解释了我看到的一些行为(它是一条直线的实际阴影,我没想到它们的效果如此真实)。重叠对象的宽度似乎仍然比边框宽一点,但是当我调整边距时,一个只是调整到另一个。我想我只是要添加第二个边框以获得我想要的效果。我花了大约 2 个小时为一件事添加阴影,也许是时候在其他地方投入更多精力了
  • 顺便说一句,非常感谢你的帮助,这让我发疯了。
猜你喜欢
  • 2012-11-02
  • 2011-08-13
  • 2011-07-31
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多