0

Silverlightアプリケーションには2つのカスタムコントロールがあり、それぞれに独自のアニメーションがあります。すべてのアニメーションを順番に再生したいのですが、同時に再生するとアニメーションが正しく再生されません。どうすればそれらの間に遅延を置くことができますか?

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            Dispatcher.BeginInvoke(() => { 
myCustomControl1.Play();
Thread.Sleep(200);
            Dispatcher.BeginInvoke(() => { myCustomControl2.Play(); });
        }
4

1 に答える 1

1

コントロールがストーリーボードを使用してアニメーションを再生していると仮定します。StoryBoardには、実行が完了した後に発生する「Completed」イベントがあります。したがって、次のようなことができます。

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の後に発生することを保証できます。

于 2012-12-12T11:29:20.100 に答える