私のWPFプロジェクトの1つでは、アニメーションを開始する前に動的に変更できるタイミングプロパティを備えたアニメーションストーリーボードをXAMLで作成していました。コード内の値を変更する方法が必要だったので、それらをクラスのプロパティにバインドしました。
基本的な考え方は、アニメーションには2つのフェーズがあり、ストーリーボードでは、合計アニメーション時間を要するObjectAnimationUsingKeyFramesを使用するため、次のようなプロパティがあります。
public TimeSpan RaiseTime { get; set }
public TimeSpan FallTime { get; set; }
public TimeSpan TotalTime
{
get { return RaiseTime + FallTime; }
}
アニメーションが最初に作成されるとき、これらのプロパティから値が正しく取得されますが、動的に変更できるため、値が変更されたことをXAMLに通知する方法が必要です。
RaiseTimeとFallTimeをDependencyPropertyに変換して、それらの変更がXAMLバインディングに反映されるようにするのは簡単ですが、TotalTimeについてはどうでしょうか。それ自体には値がないので、DPに変えることはできません。
昨日、ランダムなものを検索/試行してこれを機能させ、最終的にはRaiseTimeとFallTimeの両方へのMultiBindingとIMultiValueConverterを使用して機能するようになりました。これは、いくつかのSOの質問とブログ投稿のおかげです 。 2つのソース http://blog.wpfwonderland.com/2010/04/15/simplify-your-binding-converter-with-a-custom-markup-extension/
私の質問は:これは本当にそれを行うための最良の方法ですか?(少なくとも私には)そのような単純な作業のように見えますが、それでも機能するためには非常に多くの(ほとんど定型的な)コードが必要です。TotalTimeをバインドし、更新をXAMLにプッシュするための、より単純で冗長性の低い方法があるはずだと思いましたが、まだ見つけていません。ありますか、それとも私はただ夢を見ていますか?