我有一个StackPanel的阴影样式。内容绑定到ObservableCollection,每个项目都呈现为图像。当我从集合中删除最后一项时,即使图像不再存在,投影也会保留。这只发生在最后一项。
发生了什么事?如何确保阴影也被删除?
<Style TargetType="StackPanel" x:Key="ShadowedStackPanel">
<Setter Property="BitmapEffect">
<Setter.Value>
<DropShadowBitmapEffect Color="Black" Direction="50" ShadowDepth="5" Opacity=".65" Softness="1"/>
</Setter.Value>
</Setter>
</Style>
<ItemsControl x:Name="TilesControl">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Style="{StaticResource ShadowedStackPanel}" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source="{Binding Path=ImageSource}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
代码隐藏基本上是:
public ObservableCollection<TileViewModel> Hand = new ObservableCollection<TileViewModel>();
TilesControl.ItemsSource = Hand;
// populate the collection here
var last = Hand.Last();
Hand.Remove( last );
这留下了挥之不去的阴影效果。
如果我删除集合中的任何其他早期项目,它会重绘一切正常。只有在我删除最后一项时才会发生这种情况。
如果我调整窗口的大小,它会被重新绘制并修复...但无论出于何种原因,如果我不这样做,它会留下一个挥之不去的阴影。
如何强制重绘以使阴影消失?或者首先避免这个问题?
答案 0 :(得分:0)
您可以在删除
后使用该代码TilesControl.Items.Refresh();