RelativeSource プロパティを利用した WPF エレメント間バインディング
WPFのRelativeSourceプロパティは、スタイル、テンプレート、またはデータテンプレートで使用されるなど、非要素クラスのデータバインディングで使用されます。これは、バインディングターゲットの上位レベルまたは祖先レベルの要素からプロパティを検索できます。
一般的な推奨される相対ソース属性の設定を次に示します。
- 祖先タイプ:スタイルまたはテンプレートで、Windowタイプの要素を見つけるためにWindowをAncestorTypeに設定するなど、見つけるべき祖先要素のタイプを指定します。
<TextBlock Text="{Binding Path=Title, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"/>
- 祖先レベル:バインド先の祖先要素を検索する階層。たとえば、AncestorLevelを1に設定すると、バインド先の親要素を検索します。
<TextBlock Text="{Binding Path=DataContext.Name, RelativeSource={RelativeSource AncestorLevel=1}}"/>
- Self: 束縛対象自身をソースとする。例えば、コントロールのテンプレートでは、Selfを利用することで、コントロール自身のプロパティを束縛できる。
<TextBox Text="{Binding Path=Text, RelativeSource={RelativeSource Self}}"/>
- TemplatedParent:コントロールのテンプレートで使用し、コントロールテンプレートの親要素をソースにする。例えば、ButtonのテンプレートではTemplatedParentを使うことでButtonのカスタムプロパティにバインドできる。
<Button Content="{Binding Path=MyCustomProperty, RelativeSource={RelativeSource TemplatedParent}}"/>
これらは一般的なRelativeSourceプロパティの設定方法です。実際のニーズに応じて、適切な設定を選択して非要素クラスのバインドを行うことができます。