【问题标题】:How to create a time delay between two animations in wpf如何在wpf中的两个动画之间创建时间延迟
【发布时间】:2017-10-31 15:50:47
【问题描述】:

我是 WPF 的新手,我只想为 两个对象一个接一个地制作动画。这意味着第二个动画应该在第一个动画完成后开始。我尝试使用效果不佳的 Timer 和 Sleep 方法。下面是一个示例代码:

DoubleAnimation da1 = new DoubleAnimation()
{

   From = 10,
   To = 200,
   Duration = new System.Windows.Duration(TimeSpan.FromSeconds(sec)),
};


temLabel1.BeginAnimation(Canvas.TopProperty, da1);
Delay(); // Delay when busy

DoubleAnimation da2 = new DoubleAnimation()
{

   From = 300,
   To = 500,
   Duration = new System.Windows.Duration(TimeSpan.FromSeconds(sec)),
};

ItemLabels2.BeginAnimation(Canvas.LeftProperty, da2);

我正在使用Timer 在两个动画之间创建时间延迟

 /* Setting Timer For delay during animation */

  timer.Interval = sec * 1000 + 50;
  timer.Elapsed += Timer_Elapsed;    

延迟函数的代码是:

void Delay()
{
     busy = true;
     timer.Start();

     while (busy) {}
}

定时器已用事件处理程序

private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
    busy = false;
    timer.Stop();
 }

请纠正我的错误。我不想为此使用注意:DoubleAnimation.Completed 事件处理程序,因为在通过循环处理对象集合并为其设置动画时会很困难。 您的回复将不胜感激。

【问题讨论】:

    标签: c# wpf animation doubleanimation


    【解决方案1】:

    试试这个:

    private int sec = 2;
    
    private async Task StartAnimation()
    {
        await StartAnimationForLabel1();
        await StartAnimationForLabel2();
    }
    
    private async Task StartAnimationForLabel1()
    {
        DoubleAnimation da1 = new DoubleAnimation()
        {
            From = 10,
            To = 200,
            Duration = new System.Windows.Duration(TimeSpan.FromSeconds(sec)),
        };
         ItemLabel1.BeginAnimation(Canvas.TopProperty, da1);
        await Task.Delay(sec * 1000); 
    }
    
    private async Task StartAnimationForLabel2()
    {
        DoubleAnimation da2 = new DoubleAnimation()
        {
            From = 300,
            To = 500,
            Duration = new System.Windows.Duration(TimeSpan.FromSeconds(sec)),
    
        };
        ItemLabels2.BeginAnimation(Canvas.LeftProperty, da2);
        await Task.Delay(sec * 1000);
    }
    

    要了解有关使用 Async 和 Await 进行异步编程的更多信息,请参阅 Here

    需要 .NET Framework 4.5 或更高版本

    【讨论】:

      【解决方案2】:

      您至少有 2 个选项

      1. 在 Animation 上使用 Completed 事件 - 在事件处理程序中启动第二个动画
      2. 使用Storyboard 链接动画

      我认为选项 1 适合您的需求。

      【讨论】:

        猜你喜欢
        • 2020-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-03
        • 1970-01-01
        • 1970-01-01
        • 2018-02-11
        • 1970-01-01
        相关资源
        最近更新 更多