C# 多个Silverlight动画
我在silverlight应用程序中有2个自定义控件,每个控件都有自己的动画。我想按顺序播放所有动画,但当它们同时播放时,动画无法正常播放。我怎么能在他们之间耽搁呢C# 多个Silverlight动画,c#,silverlight,task,multithreading,C#,Silverlight,Task,Multithreading,我在silverlight应用程序中有2个自定义控件,每个控件都有自己的动画。我想按顺序播放所有动画,但当它们同时播放时,动画无法正常播放。我怎么能在他们之间耽搁呢 private void button1_Click(object sender, RoutedEventArgs e) { Dispatcher.BeginInvoke(() => { myCustomControl1.Play(); Thread.Sleep(200
private void button1_Click(object sender, RoutedEventArgs e)
{
Dispatcher.BeginInvoke(() => {
myCustomControl1.Play();
Thread.Sleep(200);
Dispatcher.BeginInvoke(() => { myCustomControl2.Play(); });
}
我假设您的控件使用故事板来播放动画。故事板有一个“已完成”事件,在它完成运行后触发。所以,你可以这样做:
public class CustomControl:Control
{
public override void ApplyTemplate()
{
_storyBoard=GetTemplateChild("AnimationStoryBoard") as Storyboard;
_storyBoard.Completed+=OnCompleted;
}
public event eventhandler AnimationCompleted;
public void Play()
{
_storyBoard.Begin();
}
private void OnCompleted(object sender, EventArgs args)
{
if(AnimationCompleted!=null)
AnimationCompleted(this,EventArg.Empty);
}
}
然后,您可以将动画链接在一起:
myCustomControl1.AnimationCompleted+=RunSecondAnimation;
myCustomControl1.Play();
private void RunSecondAnimation(object sender, EventArgs args)
{
myCustomControl2.Play();
}
现在我们可以保证动画2总是在动画1之后出现。这些自定义控件是您编写的(本地代码)还是从第三方购买的(Telerik、Infrasgistics等)?我自己的控件。它们非常简单,只是一些图像控件和媒体元素。我如何在它们之间设置一些延迟?为什么不穿线呢?睡觉能行吗?我的动画是动态创建的。好的。我将事件处理程序放入自定义控件以控制动画。现在很好用。非常感谢。我想我需要一些silverlight线程的最佳实践。