C# 如何在较长的故事板内的动画结束时调用回调?

C# 如何在较长的故事板内的动画结束时调用回调?,c#,wpf,animation,C#,Wpf,Animation,我有一个故事板,其中包含多个动画。我希望在其中一个子项完成时执行一个函数。但是,如果我将EventHandler附加到其中一个DoubleAnimation的Completed事件,则在整个情节提要完成之前不会调用它 private void Window_Activated(object sender, EventArgs e) { Storyboard myStoryboard = new Storyboard(); DoubleAnimation anim1 = new

我有一个故事板,其中包含多个动画。我希望在其中一个子项完成时执行一个函数。但是,如果我将EventHandler附加到其中一个DoubleAnimation的
Completed
事件,则在整个情节提要完成之前不会调用它

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");
}
当其中一个子动画完成时,如何获得通知

我意识到在我提供的这个极简主义示例中,创建两个故事板(或动画)并让第一个事件的完整事件触发第二个事件的开始是很容易的。然而,这不是我想要的答案。
我希望能够维护一个主时间线,我可以暂停、恢复、查找、反转等,并在通过子时间线的开始或结束时收到通知

假设圆是一个UIElement,请尝试以下操作:

DoubleAnimation anim1 = new DoubleAnimation(0, 500, new Duration(new TimeSpan(0, 0, 2)));
anim1.Completed += anim1_Complete;

circle.BeginAnimation(Canvas.LeftProperty, anim1);
其他动画也一样。 所以没有故事板。

是的,从技术上讲,这不是使用两个故事板,但它相当于一件事。请参阅问题末尾的部分,该部分表示:“我希望能够维护一个主时间线,我可以暂停、恢复、查找、反转等,并在通过子时间线的开始或结束时收到通知。”