我试图通过 StoryBoards 了解动画如何在 WPF 中发挥作用。
到目前为止,我已经完成了以下工作:
ItemContainerStyle
以确保每个项目都占用了ListView的所有宽度; EventTrigger
触发特定动画我的问题很简单。
首先,我尝试使用Loaded
触发器在项目添加到ListView的绑定ObservableCollection
时为其设置动画。它适用于opacity
属性,但问题是每次滚动时都会触发此事件,这意味着Windows可以随时随地加载和卸载项目以节省内存(这是很明显但使用了更多的复杂CPU)项)。
所以这是不行的。
此外,Unloaded
触发器“无法正常工作”并在此处解决:https://stackoverflow.com/a/14619637/3535408
因此,使用上述解决方案,我想手动触发动画。
更准确地说,每当我的项目的特定属性(更像Removing
)发生更改时,我都希望启动StoryBoard
。
如何实现滑动动画?因为我真的想让我的物品在X轴上滑动,从我的ListView进出(从左边进入,从左边进入)。
只有当项目添加到绑定的ObservableCollection
以及删除时,才能触发这些滑动动画。
以下XAML代码不起作用:
在ListView>中ListView.ItemTemplate> DataTemplate> DataTemplate.Triggers
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=Removing}" Value="true" >
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard >
<DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:0.5"/>
<DoubleAnimation Storyboard.TargetProperty="LayoutTransform.ScaleY" From="0" Duration="0:0:.2"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</DataTemplate.Triggers>
不透明度动画真的很好用。但是,LayoutTransform
会产生以下 System.InvalidOperationException :Cannot resolve all property references in the property path 'LayoutTransform.ScaleY'. Verify that applicable objects support the properties.
此外,我只是不知道如何在X轴上进行滑动动画:/
以下是我的ListView的ItemContainerStyle
:
<Setter Property="HorizontalAlignment" Value="Stretch"></Setter>
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
<Setter Property="Margin" Value="0, -2, 0, -2" ></Setter>
<Setter Property="LayoutTransform">
<Setter.Value>
<ScaleTransform x:Name="transform" />
</Setter.Value>
</Setter>
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform/>
</Setter.Value>
</Setter>
感谢您的帮助