3

所以我有一个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_Completed1 秒后被调用,而不是在 1 秒后都被调用。

任何人都知道这是 WPF 的预期行为还是我错过了什么?

注意:前面的代码只是解释我遇到的问题的一个例子。在我的真实程序中,我有多个动态生成的动画,并Storyboard在类的不同部分添加到全局中。Completed因此,使用事件和方法在前一个动画结束时开始每个动画的想法UIElement.BeginAnimation是我的最后一个资源,因为这将涉及修改我的很多代码(并且它可能会对我的应用程序)。

4

0 回答 0