そのため、Storyboard
複数のアニメーションを次々に実行する (すべてを同時に実行するわけではない) があり、それらのアニメーションの一部でDoubleAnimation.Completed
イベントをサブスクライブします。アニメーションは完全に正常に実行されますが、アニメーションのイベントは、個々のアニメーションが終了したとき (次のアニメーション)ではなくCompleted
、全体が終了したときにのみトリガーされます。例えば:Storyboard
BeginTime
Storyboard storyboard = new Storyboard();
DoubleAnimation hideAnimation = new DoubleAnimation();
hideAnimation.Duration = TimeSpan.FromSeconds(0.5);
hideAnimation.BeginTime = TimeSpan.FromSeconds(0);
hideAnimation.From = 1.0;
hideAnimation.To = 0.0;
hideAnimation.Completed += new EventHandler(HideAnimation_Completed);
Storyboard.SetTarget(hideAnimation, grid1);
Storyboard.SetTargetProperty(hideAnimation, new PropertyPath(Grid.OpacityProperty));
DoubleAnimation showAnimation = new DoubleAnimation();
showAnimation.Duration = TimeSpan.FromSeconds(0.5);
showAnimation.BeginTime = TimeSpan.FromSeconds(0.5);
showAnimation.From = 1.0;
showAnimation.To = 0.0;
showAnimation.Completed += new EventHandler(ShowAnimation_Completed);
Storyboard.SetTarget(showAnimation, grid2);
Storyboard.SetTargetProperty(showAnimation, new PropertyPath(Grid.OpacityProperty));
storyboard.Children.Add(hideAnimation);
storyboard.Children.Add(showAnimation);
storyboard.Begin();
この例HideAnimation_Completed
では、 は 1 秒後 (合計持続時間storyboard
) に呼び出さHideAnimation_Completed
れ、完了後にShowAnimation_Completed
呼び出されます。
HideAnimation_Completed
1 秒後に両方ではなく、0.5 秒ShowAnimation_Completed
後と 1秒後に呼び出されることを期待していました。
これがWPFの意図した動作なのか、それとも何か不足しているのか、誰でも知っていますか?
注: 前のコードは、私が抱えている問題を説明するための単なる例です。私の実際のプログラムでは、動的に生成されStoryboard
、クラスのさまざまな部分でグローバルに追加される複数のアニメーションがあります。Completed
したがって、イベントとメソッドを使用して前のアニメーションの最後に各アニメーションを開始するというアイデアはUIElement.BeginAnimation
、私のリソースの最後のものです。これは、かなり多くのコードを変更する必要があるためです (そして、おそらくパフォーマンスに大きな影響を与えるでしょう)。私のアプリケーション)。