3

そのため、Storyboard複数のアニメーションを次々に実行する (すべてを同時に実行するわけではない) があり、それらのアニメーションの一部でDoubleAnimation.Completedイベントをサブスクライブします。アニメーションは完全に正常に実行されますが、アニメーションのイベントは、個々のアニメーションが終了したとき (次のアニメーション)ではなくCompleted、全体が終了したときにのみトリガーされます。例えば:StoryboardBeginTime

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_Completed1 秒後に両方ではなく、0.5 秒ShowAnimation_Completed後と 1秒後に呼び出されることを期待していました。

これがWPFの意図した動作なのか、それとも何か不足しているのか、誰でも知っていますか?

注: 前のコードは、私が抱えている問題を説明するための単なる例です。私の実際のプログラムでは、動的に生成されStoryboard、クラスのさまざまな部分でグローバルに追加される複数のアニメーションがあります。Completedしたがって、イベントとメソッドを使用して前のアニメーションの最後に各アニメーションを開始するというアイデアはUIElement.BeginAnimation、私のリソースの最後のものです。これは、かなり多くのコードを変更する必要があるためです (そして、おそらくパフォーマンスに大きな影響を与えるでしょう)。私のアプリケーション)。

4

0 に答える 0