如何在更长的Storyboard内部的DoubleAnimation结束时调用回调?

时间:2014-09-16 21:06:37

标签: c# wpf animation

我有一个包含多个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");
}

如果其中一个儿童动画完成,我该如何收到通知?

我意识到在这个极简主义的例子中我提供了很容易创建两个故事板(或动画)并且第一次触发的完成事件是第二次触发的开始。但是,这不是我要找的那种答案。 我希望能够保持一个主时间轴,我可以暂停,恢复,寻找,反转等,并在子时间线的开始或结束时通知。

1 个答案:

答案 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。