我有一个ItemsControl,其中包含一些嵌套容器。我想在主要ItemsControl的每个元素周围添加一个drophadow。但是它将它添加到主要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代码保留在我放在上面的位置,尽管我说过,我可以把它放在很多地方以达到同样的效果。
使用Dropshadow
With Error http://img811.imageshack.us/img811/2168/dropshadowerror.png
没有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>
答案 0 :(得分:2)
您是否尝试过以下操作?
我添加了另一个Grid,并添加了一个具有效果的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>