如何在wpf中的两个动画之间创建时间延迟
How to create a time delay between two animations in wpf
我是 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();
}
不对的地方请指正。我不想为此目的使用 Note: DoubleAnimation.Completed
事件处理程序,因为在通过循环处理和动画对象集合时会很困难。
您的回复将不胜感激。
试试这个:
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
Require .NET Framework 4.5 or more
您至少有 2 个选项
- 在动画上使用 Completed 事件 - 在事件处理程序中启动第二个动画
- 使用Storyboard链接动画
我认为选项 1 符合您的需要。
我是 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();
}
不对的地方请指正。我不想为此目的使用 Note: DoubleAnimation.Completed
事件处理程序,因为在通过循环处理和动画对象集合时会很困难。
您的回复将不胜感激。
试试这个:
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
Require .NET Framework 4.5 or more
您至少有 2 个选项
- 在动画上使用 Completed 事件 - 在事件处理程序中启动第二个动画
- 使用Storyboard链接动画
我认为选项 1 符合您的需要。