「Androidは電気羊の夢を見るか」を読みたい管理者のブログ

仕事などでの色々な発見を記事にしてます。不定期更新。

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:いろんな呼び方があると思いますがこのブログではコントロールで統一します