我正在尝试使用StoryBoards了解WPF中动画的工作原理。
到目前为止,我已经管理了以下内容:
- 使用自定义项和资源绑定创建 ListView ;
- 使用
ItemContainerStyle
以确保每个项目占据 ListView 的所有宽度; - 用于
EventTrigger
触发特定动画
我的问题很简单。
首先,我尝试使用Loaded
触发器在项目添加到 ListView 的 bind 时为其设置动画ObservableCollection
。它适用于opacity
属性,但问题是每次滚动时都会触发此事件,这意味着 Windows 会在旅途中加载和卸载项目以节省内存(这是不稳定的,但使用更多的 CPU 和复杂的项目)。
所以这是不行的。此外,Unloaded
触发器“不起作用”并在此处解决:https ://stackoverflow.com/a/14619637/3535408
因此,使用上述解决方案,我想手动触发动画。
更准确地说,每当我的项目的特定属性(很像Removing
)发生更改时,我都希望StoryBoard
开始。
如何为滑动动画完成此操作?因为我真的想让我的项目在我的 ListView 的 X 轴上滑动进出(从左侧进入,从左侧离开)。
这些滑动动画只有在项目被添加到绑定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>
谢谢您的帮助