0

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

そして、これは長引くドロップシャドウ効果を残します。

レンダリングエラー

コレクション内の他の以前のアイテムを削除すると、すべてが正常に再描画されます。これは、最後のアイテムを削除した場合にのみ発生します。

ウィンドウのサイズを変更すると、再描画されて修正されます...しかし、何らかの理由で、サイズを変更しないと、影が残ります。

影が消えるように再描画を強制するにはどうすればよいですか?または、そもそも問題を回避しますか?

4

1 に答える 1

0

削除後にコードを使用できます

TilesControl.Items.Refresh();
于 2013-03-09T20:52:08.153 に答える