如何动画添加&在ListView / Box中删除?

时间:2015-05-27 14:46:07

标签: c# wpf xaml animation wpf-animation

我试图通过 StoryBoards 了解动画如何在 WPF 中发挥作用。

到目前为止,我已经完成了以下工作:

  • 使用自定义项和资源绑定创建ListView;
  • 使用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>

感谢您的帮助

0 个答案:

没有答案