ObjectAnimationUsingKeyFramesでテンプレートバインディングを使用します
-
09-10-2019 - |
質問
マウスの上にあるときに、コントロールの背景色を設定しようとします。 Visual State Managerを介してやろうとしています。次のコードを実行することができました。
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Control.Background" Storyboard.TargetName="BorderBackground">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<SolidColorBrush Color="#FF123456" />
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
しかし、私はテンプレートに色を設定したくありませんが、コントロールの値に結合します。 「Tag」プロパティで次の方法で試しました。
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Control.Background" Storyboard.TargetName="BorderBackground">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<SolidColorBrush Color="{TemplateBinding Tag}" />
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
このスタイルを使用しているコントロールのタグプロパティを「#FF123456」に設定します。
しかし、これはうまくいきません。エラーメッセージは残されません。背景を変更するだけではありません。誰かが知っています、問題は何でしょうか?
前もって感謝します、
フランク
解決
残念ながら、あなたがそれをしようとしている方法は、シルバーライトでは機能しません。 VisualStateManagerアニメーションはディスプレイツリーの一部ではないため、バインディングを使用できません。ただし、staticResources(リソース辞書で色の設定)とコードベースのアニメーションは、さまざまな回避策です(正確に何をしたいかによって異なります)。後者については、同様の質問をしたスレッドをチェックしてください。 Silverlight 4 UserControlでプロパティを動的にアニメーション化するにはどうすればよいですか?
他のヒント
単一のターゲットで動的に行うことはできませんが、できることは、宣言で明示的に{テンプレートバインディングタグ}に背景を設定できる別のターゲット(BorderbackgroundAltと呼ばれる)を作成することです。
次に、デフォルトでBorderbackgroundAltを崩壊させることができます。また、色を切り替える代わりにアニメーションフレームで可視性を切り替えることができます。