我有一个包含多个DoubleAnimations的Storyboard。我想在其中一个孩子完成时执行一个函数。但是,如果我将EventHandler附加到其中一个DoubleAnimations的Completed
事件,则在整个Storyboard完成之前不会调用它。
private void Window_Activated(object sender, EventArgs e)
{
Storyboard myStoryboard = new Storyboard();
DoubleAnimation anim1 = new DoubleAnimation(0, 500, new Duration(new TimeSpan(0, 0, 2)));
anim1.Completed += anim1_Complete;
Storyboard.SetTarget(anim1, circle);
Storyboard.SetTargetProperty(anim1, new PropertyPath("(Canvas.Left)"));
myStoryboard.Children.Add(anim1);
DoubleAnimation anim2 = new DoubleAnimation(500, new Duration(new TimeSpan(0,0,2)));
anim2.BeginTime = new TimeSpan(0,0,2);
Storyboard.SetTarget(anim2, circle);
Storyboard.SetTargetProperty(anim2, new PropertyPath("(Canvas.Top)"));
myStoryboard.Children.Add(anim2);
myStoryboard.Begin();
}
void anim1_Complete(object sender, EventArgs e)
{
Console.WriteLine("anim 1 complete");
}
如果其中一个儿童动画完成,我该如何收到通知?
我意识到在这个极简主义的例子中我提供了很容易创建两个故事板(或动画)并且第一次触发的完成事件是第二次触发的开始。但是,这不是我要找的那种答案。 我希望能够保持一个主时间轴,我可以暂停,恢复,寻找,反转等,并在子时间线的开始或结束时通知。
答案 0 :(得分:0)
假设圆圈是UIElement,请尝试:
DoubleAnimation anim1 = new DoubleAnimation(0, 500, new Duration(new TimeSpan(0, 0, 2)));
anim1.Completed += anim1_Complete;
circle.BeginAnimation(Canvas.LeftProperty, anim1);
其他动画也一样。 所以没有StoryBoard。