ゆうなんとかさんの雑記帳的な。

Twitterで踊ったり音ゲーしたりしてるあの名前がよくわからない人が書いてるらしいよ。

VisualStateがよくわからないようなよくわかるような気がする

いったいなんだそれ

WPFSilverlightから逆輸入されてきたスタイルに関するもので、その要素の状態に名前を付けて表わしたものです。要はCSSの:hover疑似クラスみたいなやつをもっと強力に幅広く使えるようにしたようなものです。もともとWPFにはTriggerがあったのですが、これが超絶めんどくさいのでで輸入してきたのでしょう。これだけ見ればそんなに難しいものではないようですが、ただこれ理解するまでが大変です。

じゃあどんな状態があるの?

ボタンだったら押されたとき、有効でないとき、マウスが上にあるときなど。リストのアイテムなら選択されたときやフォーカスが当たってないけど選択されているときなど。だいたいのコントロールに共通するのだと、マウスが上に載っているときなどです。上げていくときりがないので、確認するならBlendを使うのがいいでしょう。
適当にコントロールを右クリックして、「テンプレートの編集」→「コピーしてテンプレートを作成」と選ぶと、現在コントロールに設定されているテンプレートがコピーされます。その中のどこかにそのコントロールに定義されているVisualStateが一覧で突っ込まれています。Blendであれば「状態」というタブを見るとグループごとに一覧できます。こんな感じに。
f:id:yuu_xxxx:20140408233513p:plain
これにストーリーボードを設定して、状態間の遷移をするときにアニメーションをすることができます。もちろんディレイさせることやアニメーションを挟まずに即スタイルを変更することもできます。アニメーションも数値や色に限らず、列挙体の値もアニメーションさせることができます。とはいっても列挙体の値にあいまいな状態など存在しないので、動きはAからBへ一瞬で飛ぶような感じになります。

独自の状態って作れないの?

作れます。ただ今の私は例示できるほどよくわかっていないので作れません。ビュー側でGoToStateというメソッドを呼んでやるか、Blendの拡張SDKでVisualStateを変えてやるアクションを起こせばできるそうです。