我目前正在创建一个控件,它主要是
ItemsControl
显示一些项目。
此外,我还有一些控件,允许用户筛选其中的项
项目控制
.
我要做的是让用户更好地看到应用过滤器时删除的项目。
所以我所做的不是真正过滤
ICollectionView
,我介绍了一个新的物业
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
再次应用,但用户确实筛选了任何内容。
原因是,列表更改后,
数据板
将重新创建,scaley为“1”,然后
数据管理器
再次应用,记分板再次应用。
在这种情况下,我希望没有动画发生。
你知道怎么做吗?
蒂亚
马丁