TriggerとAnimationを組み合わせる もしくは DataTriggerとTriggerて何が違うのよって話
ここ最近WPFの話題ばかりです。みなさんごきげんよう。
ではいきますよー
DataTriggerがようやく理解できた話 - 「Androidは電気羊の夢を見るか」を読みたい管理者のブログ
ここで「Triggerとはなんぞや」ってやってるのですが、
Animationの発火ポイントをTriggerにすることもできるのですね。
今何を目指してるかといいますと
WPF4.5入門 その48 「WPFのアニメーション その1」 - かずきのBlog@hatena
ここに書いてあることをDataTrigerを使ってやりたいわけです。
上のリンク先ではアニメーションを適用するコントロール*1をアニメーション定義側で指定してるわけです。
逆にコントロールそのものにアニメーションを定義することも出来て
MSDNなんかではその方法が紹介されてますね
↓こちら↓
方法 : データが変化したときにアニメーションをトリガする
datatemplate - WPF DataTrigger cannot find Trigger Target - Stack Overflow
ここ見る限りだと双方向でいろんなものを指定できそう(実証実験はまだやってない)
考え方としては
・コントロールの中でアニメーションを定義する
・アニメーション定義の中でターゲットコントロールを指定する
の2通りある
なるほど
あ、わかってきた
EventTriggerやらTriggerでコントロールの状態変化なりイベントを読み取ってアニメーションを発生させる。
そのアニメーションを適用する先は必ずしもアニメーションを発生させたコントロールでなくてもよい。
一方でDataTriggerは任意の情報源(データ)を参照してTriggerを発生させる。
<Canvas> <Button Canvas.Top="10" Canvas.Left="10" Content="Animation start"> <Button.Triggers> <!--あくまでButtonControlが発生させるTriggerなのでDataTriggerはここには書けない((引用者コメント))--> <EventTrigger RoutedEvent="Button.Click"> <BeginStoryboard Storyboard="{StaticResource rectAnimation}" /> </EventTrigger> </Button.Triggers> </Button> <!-- アニメーションのターゲット --> <Rectangle x:Name="rect" Canvas.Top="50" Canvas.Left="10" Width="50" Height="50" Fill="Red"/> </Canvas> [http://okazuki.hatenablog.com/entry/2014/08/27/214003:title]
なんか前エントリの答えが出た。
今日はこのへんで
*1:いろんな呼び方があると思いますがこのブログではコントロールで統一します