我目前正在創建一個控件,主要是一個ItemsControl
顯示一些項目。 此外,我有一些控件,允許用戶篩選ItemsControl
中的項目。HowTo動畫過濾項目控件(WPF)中顯示的項目
我想要做的是讓用戶更好地看到應用過濾器時刪除哪些項目。
因此,我所做的並不是真正過濾ICollectionView
,而是在用於每個項目的VM上引入了一個新屬性IsVisible
。 後來我加了ScaleTransform
作爲LayoutTransform
到DataTemplate
,我增加了一個DataTrigger
動畫變換:
<Style x:Key="FilterCollapse" TargetType="{x:Type StackPanel}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsVisible}" Value="False">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity"
To="0"
Duration="0:0:0.5"/>
<DoubleAnimation Storyboard.TargetProperty="LayoutTransform.ScaleY"
To="0"
BeginTime="0:0:0.0"
Duration="0:0:0.5"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="LayoutTransform.ScaleY"
To="1"
Duration="0:0:0.5"/>
<DoubleAnimation Storyboard.TargetProperty="Opacity"
To="1"
BeginTime="0:0:0.5"
Duration="0:0:0.5"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
<DataTemplate x:Key="MyTemplate">
<StackPanel Style="{StaticResource FilterCollapse}">
<StackPanel.LayoutTransform>
<ScaleTransform ScaleX="1" ScaleY="1"/>
</StackPanel.LayoutTransform>
如果現在用戶過濾一切工作正常。 但我遇到的問題是,如果列表中有任何更改(添加新項目,...)Storyboard
再次應用,雖然用戶沒有過濾任何東西。
原因是,在列表更改後,將重新創建DataTemplate
,ScaleY爲「1」,然後再次應用DataTrigger
,並重新應用記分牌。
在這種情況下,我希望沒有動畫發生。
任何想法如何做到這一點? tia Martin