MithrilWorks

[WPF/XAML] 添付プロパティをバインディングする

 添付プロパティに値をバインディングする方法、添付プロパティの値をバインディングする方法を紹介する。
 添付プロパティとは、親要素で定義されたプロパティを子要素から値を別々に設定するために使用されるプロパティで、依存関係プロパティの一種である。この値をバインディングするには、以下のように記述する。
XAMLコード
1
2
3
4
5
<Canvas>
	<Rectangle
	Canvas.Left="{Binding ElementName=SourceObject, Path=(Canvas.Left)}"
	/>
</Canvas>
 ElementNameプロパティにはバインディングするソースオブジェクトを、Pathプロパティにはバインディングするプロパティを指定する。指定するプロパティがプロパティパスの場合、プロパティを「()」で括る必要がある。

C#でのバインディング

 また、C#コードを用いてバインディングを行う場合、System.Windows.Data.Bindingクラスを用いて以下のように記述する。
C#コード
1
2
3
4
5
TargetObject.SetBinding(
	Canvas.LeftProperty,
	new System.Windows.Data.Binding("(Canvas.Left)"){
		Source = SourceObject
	});
 注意しなければならないのは、System.Windows.Forms.Bindingクラスを使用しないことである。何もせずにBindingのみを記述した場合、こちらのBindingと認識されてしまうおそれがあるため、ネームスペースまで含めた完全なクラス名で記述しておくのが無難である。
 TargetObjectには対象となるオブジェクトを、SourceObjectにはバインディングのソースとなるオブジェクトを指定する。
 以上が添付プロパティのバインディング方法である。添付プロパティでなく普通のプロパティであっても、上記のコードで問題なく動作する。