単純なボタンを作成してから[テンプレートの編集]->[コピーの編集]を選択すると、Blendはすべてのボタンの状態(MouseEnter、MouseLeave、Pressedなど)とともにスタイル領域を自動的に生成します。生成されたコードのどこにも、「MouseOver」イベントで状態を「MouseOver」に変更することは示されていませんが、それでも機能します。
標準のボタンはどのように機能しますか?AutoEventWireUpのようなものが起こっていますか?
単純なボタンを作成してから[テンプレートの編集]->[コピーの編集]を選択すると、Blendはすべてのボタンの状態(MouseEnter、MouseLeave、Pressedなど)とともにスタイル領域を自動的に生成します。生成されたコードのどこにも、「MouseOver」イベントで状態を「MouseOver」に変更することは示されていませんが、それでも機能します。
標準のボタンはどのように機能しますか?AutoEventWireUpのようなものが起こっていますか?
コントロール自体が、尊重する状態を定義します。残念ながら、魔法の自動配線は行われていません。ボタンには、マウスがボタンの上にあるときを決定し、その場合は視覚的な状態をMouseOverに設定するコードが含まれています。TemplateVisualStateAttributeは、このコントロールに特定の有効な状態があることをBlendに通知するものですが、コントロール自体のコードは、実際にどの状態にあるかを決定するものです。
独自のコントロールを開発している場合、これにより、コントロールがサポートする状態を定義する負担と、現在の状態を正しく判断する作業が発生します。
参考:ほとんどの組み込みコントロールには、MSDNドキュメントにサポートされている状態のリストがあります。たとえば、Silverlight3のボタンはここにあります。