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 );
そして、これは長引くドロップシャドウ効果を残します。
コレクション内の他の以前のアイテムを削除すると、すべてが正常に再描画されます。これは、最後のアイテムを削除した場合にのみ発生します。
ウィンドウのサイズを変更すると、再描画されて修正されます...しかし、何らかの理由で、サイズを変更しないと、影が残ります。
影が消えるように再描画を強制するにはどうすればよいですか?または、そもそも問題を回避しますか?