所以我有一个Storyboard
可以一个接一个地运行多个动画(不是同时运行所有动画),并且在其中一些动画中我订阅了该DoubleAnimation.Completed
事件。动画运行得非常好,但Completed
动画事件仅在整个Storyboard
完成后触发,而不是在单个动画完成时(BeginTime
下一个动画)。例如:
Storyboard storyboard = new Storyboard();
DoubleAnimation hideAnimation = new DoubleAnimation();
hideAnimation.Duration = TimeSpan.FromSeconds(0.5);
hideAnimation.BeginTime = TimeSpan.FromSeconds(0);
hideAnimation.From = 1.0;
hideAnimation.To = 0.0;
hideAnimation.Completed += new EventHandler(HideAnimation_Completed);
Storyboard.SetTarget(hideAnimation, grid1);
Storyboard.SetTargetProperty(hideAnimation, new PropertyPath(Grid.OpacityProperty));
DoubleAnimation showAnimation = new DoubleAnimation();
showAnimation.Duration = TimeSpan.FromSeconds(0.5);
showAnimation.BeginTime = TimeSpan.FromSeconds(0.5);
showAnimation.From = 1.0;
showAnimation.To = 0.0;
showAnimation.Completed += new EventHandler(ShowAnimation_Completed);
Storyboard.SetTarget(showAnimation, grid2);
Storyboard.SetTargetProperty(showAnimation, new PropertyPath(Grid.OpacityProperty));
storyboard.Children.Add(hideAnimation);
storyboard.Children.Add(showAnimation);
storyboard.Begin();
在此示例HideAnimation_Completed
中,将在 1 秒(总持续时间storyboard
)后调用,并在HideAnimation_Completed
完成后ShowAnimation_Completed
调用。
期望HideAnimation_Completed
在 0.5 秒和ShowAnimation_Completed
1 秒后被调用,而不是在 1 秒后都被调用。
任何人都知道这是 WPF 的预期行为还是我错过了什么?
注意:前面的代码只是解释我遇到的问题的一个例子。在我的真实程序中,我有多个动态生成的动画,并Storyboard
在类的不同部分添加到全局中。Completed
因此,使用事件和方法在前一个动画结束时开始每个动画的想法UIElement.BeginAnimation
是我的最后一个资源,因为这将涉及修改我的很多代码(并且它可能会对我的应用程序)。