RelativeSource のマークアップ拡張機能
更新 : 2007 年 11 月
バインディングのマークアップ拡張機能内で、または XAML で設定された Binding 要素の RelativeSource プロパティの設定時に使用される RelativeSource バインディング ソースのプロパティを指定します。
XAML 属性の使用方法
<Binding RelativeSource="{RelativeSource modeEnumValue}" .../>
XAML 属性の使用方法 (バインディング拡張内で入れ子にした場合)
<object property="{Binding RelativeSource={RelativeSource modeEnumValue} ...}" .../>
XAML オブジェクト要素の使用方法
<Binding>
<Binding.RelativeSource>
<RelativeSource Mode="modeEnumValue"/>
</Binding.RelativeSource>
</Binding>
- or
<Binding>
<Binding.RelativeSource>
<RelativeSource
Mode="FindAncestor"
AncestorType="{x:Type typeName}"
AncestorLevel="intLevel"
/>
</Binding.RelativeSource>
</Binding>
XAML 値
modeEnumValue |
次のいずれかになります。
|
FindAncestor |
文字列トークン FindAncestor。このトークンを使用すると、RelativeSource によって先祖の型およびオプションで先祖レベルを指定するモードになります。これは、Mode プロパティが FindAncestor に設定された状態で作成された RelativeSource に対応します。 |
typeName |
FindAncestor モードで必要です。AncestorType プロパティに指定する型の名前。 |
intLevel |
FindAncestor モードのオプションです。論理ツリー内で親の方向に向けて数えた先祖レベル。 |
解説
上に示した FindAncestor モードのオブジェクト要素構文では、2 番目のオブジェクト要素構文は FindAncestor モード向けに使用されます。FindAncestor モードでは、AncestorType 値が必要です。検索する先祖の型への x:Type マークアップ拡張機能参照を使用して、AncestorType を属性として設定する必要があります。AncestorType 値は、実行時にバインディング要求を処理する際に使用されます。
FindAncestor モードでは、オプションの AncestorLevel プロパティは、要素ツリー内に型の先祖が複数存在する可能性がある場合に、先祖の検索のあいまいさを解消するのに役立ちます。
FindAncestor モードの使用の詳細については、RelativeSource を参照してください。
ここで説明されていないデータ バインディングの概念については、「データ バインディングの概要」を参照してください。
WPF XAML プロセッサ実装では、このマークアップ拡張機能の処理は、RelativeSource クラスによって定義されます。
RelativeSource はマークアップ拡張機能です。一般にマークアップ拡張機能を実装するのは、属性値をリテラル値やハンドラ名以外にエスケープする要件が存在し、その要件の適用範囲がグローバルで、特定の型やプロパティに型コンバータを適用するだけにとどまない場合です。XAML のすべてのマークアップ拡張機能では、それぞれの属性構文で { と } の 2 つの記号を使用します。これは規約であり、これに従って XAML プロセッサは、マークアップ拡張機能で属性を処理する必要があることを認識します。詳細については、「マークアップ拡張機能と XAML」を参照してください。