Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF:如何初始化要从';这是动画吗?_Wpf_Animation_Datatrigger - Fatal编程技术网

WPF:如何初始化要从';这是动画吗?

WPF:如何初始化要从';这是动画吗?,wpf,animation,datatrigger,Wpf,Animation,Datatrigger,视图中有一个网格,其“可见性”由集合是否有多个元素决定。在添加和删除元素时,该栅格需要设置展开和折叠的动画。我已经写了一个DataTrigger来做这件事,它工作得很好 <DataTrigger Binding="{Binding Path=MyCollection.Count, Converter={StaticResource IsLessThanConverter}, ConverterParameter=2}" Value="True"> <DataTrigge

视图中有一个网格,其“可见性”由集合是否有多个元素决定。在添加和删除元素时,该栅格需要设置展开和折叠的动画。我已经写了一个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>

我正在初始化网格到默认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
时,在测试此解决方案时,我在某些情况下遇到意外行为).

这太完美了。我认为这是一个常见的动画初始化问题(它有点像依赖属性值优先级),但它只是一个普通的旧值初始化问题。谢谢您的回答!