我的视图中有一个网格,其可视性"取决于集合是否包含多个元素。随着元素的添加和删除,Grid需要进行动画扩展和折叠。我已经编写了一个DataTrigger,可以正常工作。
<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>
我正在将网格的LayoutTransform初始化为默认的ScaleTransform
<Grid x:Name="MyCollapsingGrid">
<Grid.LayoutTransform>
<ScaleTransform />
</Grid.LayoutTransform>
</Grid>
当我的视图使用包含两个元素的集合进行初始化并删除一个元素时,Grid动画会正确折叠。但是,当我使用带有一个元素的集合初始化我的视图时,它会在播放折叠动画时简要显示Grid。由于我已经使用触发器来执行此动画,因此当我的集合只有一个元素时,如何初始化Grid的LayoutTransform以使ScaleX为0,这样我就不会看到崩溃动画?
答案 0 :(得分:1)
最简单的解决方案是将ScaleTransform.ScaleY
属性与模式设置为OneTime
绑定:
<ScaleTransform ScaleY="{Binding Path=MyCollection.Count,
Converter={StaticResource TheMissingConverter},
ConverterParameter=2,
Mode=OneTime}" />
此图片中唯一缺少的是转换器,它应与IsLessThanConverter
的工作方式类似,但它应返回1
和0
而不是false
和{{1如果count不小于true
,则缩放应为1
,否则为2
。请注意,将模式设置为0
非常重要(模式设置为OneTime
我在测试此解决方案时在某些情况下遇到了意外行为。)