かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

WPF4.5入門 その12 「その他のXAMLの機能」

添付プロパティ

添付プロパティは「型名.プロパティ名」といった形で指定するプロパティです。通常のプロパティと異なる点は、プロパティを設定する型と添付プロパティを指定するときの型名が必ずしも一致しなくても良いという点です。添付プロパティは、主に親要素が子要素に追加で情報を与えるのに利用されます。
具体例としては、コントロールの要素を配置するためのレイアウトの情報があげられます。たとえばボタンを左から10px, 上から20pxの場所に置くといった場合にボタンにLeftやTopというプロパティを付けるというのが一般的な考えになると思います。しかし、これでは絶対座標以外のレイアウトの指定方法が出てきた場合にボタンのプロパティが爆発的に増えてしまうといった問題があります。このようなときにLeftやTopといった情報は上位のパネルの添付プロパティとして定義して、ボタンとは定義は切り離しつつもボタンに直接値を設定できるといったことを実現しています。添付プロパティは、XAMLからコードに展開される際に「クラス名.Set添付プロパティ名(オブジェクト, 値)」という形に展開されます。値の取得には「クラス名.Get添付プロパティ名(オブジェクト)」の形式のメソッドを使用します。

添付プロパティについては、WPFのコントロールの基底クラスを説明する箇所で再度取り上げます。

添付イベント

添付イベントもWPFのコントロールの規定クラスと強く紐づいている概念のため、ここでは詳細は割愛します。添付プロパティと同じように、実際にそのオブジェクトに定義されていないイベントハンドラを、設定する記法になります。

TypeConverter

XAMLでは、プロパティの指定に属性構文を使うと値は必ず文字列で指定します。しかし、XAMLではint型などの数字や、enumや、その他のクラス型のプロパティに対しても文字列で指定することが出来ます。これは、型コンバータという仕組みが間に入って型変換を行っているためです。普段、特別意識する必要はありませんが、文字列を指定するだけでオブジェクトを指定できるケースがある場合は、この仕組みのおかげだと頭の片隅に入れておいてください。
また、ここでは詳細に説明しませんが、独自の型コンバータを定義することもできます。独自の型を定義してXAMLから簡単に文字列で指定するのが適切だと思った場合には以下のMSDNを参考にして実装を検討してみてください。

その他の機能

XAMLには、その他に様々な機能が定義されています。ここでは詳細は説明しませんが、今後の説明の中で出てきた段階で必要に応じて説明をしたいと思います。以下に、個人的に目を通しておいた方がよいと思うものについてMSDNのリンクを列挙します。