WPF:如何初始化要从';这是动画吗?
视图中有一个网格,其“可见性”由集合是否有多个元素决定。在添加和删除元素时,该栅格需要设置展开和折叠的动画。我已经写了一个DataTrigger来做这件事,它工作得很好WPF:如何初始化要从';这是动画吗?,wpf,animation,datatrigger,Wpf,Animation,Datatrigger,视图中有一个网格,其“可见性”由集合是否有多个元素决定。在添加和删除元素时,该栅格需要设置展开和折叠的动画。我已经写了一个DataTrigger来做这件事,它工作得很好 <DataTrigger Binding="{Binding Path=MyCollection.Count, Converter={StaticResource IsLessThanConverter}, ConverterParameter=2}" Value="True"> <DataTrigge
<DataTrigger Binding="{Binding Path=MyCollection.Count, Converter={StaticResource IsLessThanConverter}, ConverterParameter=2}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard TargetName="MyCollapsingGrid" TargetProperty="(FrameworkElement.LayoutTransform).(ScaleTransform.ScaleY)">
<DoubleAnimation Duration="00:00:0.2"
EasingFunction="{StaticResource ExpoEaseInOut}"
To="0" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard TargetName="MyCollapsingGrid" TargetProperty="(FrameworkElement.LayoutTransform).(ScaleTransform.ScaleY)">
<DoubleAnimation Duration="00:00:0.2"
EasingFunction="{StaticResource ExpoEaseInOut}"
To="1" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
我正在初始化网格到默认ScaleTransform的LayoutTransform
<Grid x:Name="MyCollapsingGrid">
<Grid.LayoutTransform>
<ScaleTransform />
</Grid.LayoutTransform>
</Grid>
当使用包含两个元素的集合初始化视图并删除其中一个元素时,栅格将正确设置折叠动画。但是,当我使用一个元素的集合初始化视图时,它会在播放折叠动画时短暂显示栅格。由于我已经在使用触发器来执行此动画,当我的集合只有一个元素时,如何初始化网格的LayoutTransform以使ScaleX为0,这样我就看不到折叠动画?最简单的解决方案是绑定
ScaleTransform.ScaleY
属性,并将模式设置为OneTime
:
<ScaleTransform ScaleY="{Binding Path=MyCollection.Count,
Converter={StaticResource TheMissingConverter},
ConverterParameter=2,
Mode=OneTime}" />
此图中唯一缺少的部分是转换器,它的工作原理应该与
IsLessThanConverter
类似,只是它应该分别返回1
和0
,而不是false
和true
(如果计数不小于2
,则刻度应为1
,否则刻度应为0
)。请注意,将模式设置为OneTime
(模式设置为OneWay
时,在测试此解决方案时,我在某些情况下遇到意外行为).这太完美了。我认为这是一个常见的动画初始化问题(它有点像依赖属性值优先级),但它只是一个普通的旧值初始化问题。谢谢您的回答!