2

我正在尝试使用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.InvalidOperationExceptionCannot 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>

谢谢您的帮助

4

0 回答 0