我正在尝试为我的列表视图项目制作"消失"动画。
我有两个动画,一个是双精度动画,它将不透明度从 1 到 0 进行动画处理,另一个是厚度动画,它将边距从 0,0,0,0 到 50,0,0,0,0 进行动画处理。
如果我将其设置为堆栈面板的样式(在Listview.Itemtemplate中),它们都会同时进行动画处理,这看起来有点无聊。所以我想让每个对象随机开始动画。在 WPF 中是否有执行此操作的好方法?
动画由数据触发器触发。
要正确实现这一点,您需要实现一个自定义Panel
来执行此操作。如果您以前没有这样做过,这并不难,绝对是所有 WPF 开发人员在需要时都应该做的事情。您可以在 MSDN 上"面板概述"页的"自定义面板元素"部分找到大量信息和代码示例。另请参阅有关 WPF Tutorial.net 的如何在 WPF 中创建自定义布局面板一文
因此,这将使您了解如何创建自定义Panel
...基本上,您只实现两个MeasureOverride
和ArrangeOverride
方法,您可以在其中访问相关集合控件中的元素。我有几个这样的动画Panel
,我可以通过ArrangeOverride
方法对每个孩子的Opacity
进行动画处理,如下所示:
private void AnimateOpacity(UIElement child, double from, double to,
TimeSpan animationDuration, EventHandler animationCompletedHandler)
{
DoubleAnimation opacityAnimation = new DoubleAnimation(from, to, animationDuration,
FillBehavior.HoldEnd);
if (animationCompletedHandler != null) opacityAnimation.Completed +=
animationCompletedHandler;
child.BeginAnimation(UIElement.OpacityProperty, opacityAnimation,
HandoffBehavior.Compose);
}