2

シナリオ: (数値) テキストボックス、ボタン、およびラベルがあります。ボタンをクリックすると、ラベルがテキストボックスの数値に「アニメーション化」されます(回転するダイヤルのように)

与えられた:

a) ストーリーボードのアニメーションはデータ バインディングを持つことができない (フレームワーク要素ではないため) b) Silverlight にトリガーがない

ビューモデルをビューのストーリーボードに結合するのが最も少なく、ターゲットアニメーション値を更新し、ボタンがクリックされたときにアニメーションを開始する方法は何ですか?

注: シナリオは概念的なものであるため、数値の「アニメーション化」などの詳細に集中しないでください。

4

2 に答える 2

2

あなたの目標が厳密にビュー内のコード ビハインドを減らすことである場合、Label に添付された動作がこれに役立つと思います。ラベルに添付されたビヘイビアーは、アニメーション化される数値を公開し、この数値が変更されると (コードで) アニメーションが実行され、古い値から新しい値にアニメーション化されます。

欠点の 1 つは、必要に応じて読み込んでテンプレート化された値を置き換えることができるリソース ファイルに、テンプレート化された (最初は偽の値があるだけの) バージョンを保存しない限り、アニメーションがコードになっていることです。

Josh Smithのこの記事は、愛着行動に関する権威のようです。

http://joshsmithonwpf.wordpress.com/2008/08/30/introduction-to-attached-behaviors/

于 2009-09-29T20:05:39.947 に答える
0

最近、MVVMアプリケーションで同様の問題を解決する必要がありました。私の問題は、コンテナの高さをゼロから自動にアニメーション化する必要があることでした。Autoは動的な値であるため、アニメーション(またはストーリーボード)をオンデマンドで作成(または操作)する必要があることを認識しました。私が導入した解決策は、ビューコードビハインドを使用してアニメーションを更新および起動することでした。

これは、MVVMに最も適したアプローチではありません。ただし、WPFのアニメーションはXAMLでは扱いにくい場合があります。このソリューションは実際にはXAML制限の回避策にすぎないため、コードをビューに直接結び付けることは問題ないようです。同様に、ビューがモックされている場合、アニメーション化するフレームワーク要素がないため、このコードをVM側に配置することは実際には意味がありません。

誰かがより良いアプローチを持っていますか?

于 2009-09-29T13:39:21.460 に答える