所以我有一个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();
在此示例中,{1}}将在1秒后调用(HideAnimation_Completed
的总持续时间),storyboard
完成后,HideAnimation_Completed
将被调用。
预计在{0.5}后会调用ShowAnimation_Completed
,在1秒后调用HideAnimation_Completed
,而不是在1秒后调用。{/ p>
有人知道这是WPF的预期行为还是我错过了什么?
注意:前面的代码只是一个例子来解释我遇到的问题。在我的真实程序中,我有多个动画,这些动画是动态生成的,并在类的不同部分添加到全局ShowAnimation_Completed
中。因此,使用Storyboard
事件和Completed
方法在前一个动画结束时启动每个动画的想法是我的最后一个资源,因为这将涉及修改我的很多代码(并且它可能会对我的应用程序的性能产生很大影响。)