我目前正在创建一个控件,主要是一个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