如何在较长的情节提要中调用DoubleAnimation末尾的回调

本文关键字:调用 DoubleAnimation 回调 | 更新日期: 2023-09-27 18:22:02

我有一个包含多个DoubleAnimations的情节提要。每当其中一个孩子完成时,我想执行一个函数。但是,如果我将EventHandler附加到其中一个DoubleAnimations的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");
}

当其中一个子动画完成时,如何获得通知?

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

如何在较长的情节提要中调用DoubleAnimation末尾的回调

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

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

其他动画也是如此。所以没有故事板。