TemplateBinding のマークアップ拡張機能

コントロール テンプレート内のプロパティの値を、template 宣言されたコントロールの別のプロパティの値にリンクします。

XAML 属性の使用方法

<object property="{TemplateBinding sourceProperty}" ... />

XAML 属性の使用方法 (テンプレートまたはスタイルの Setter プロパティの場合)

<Setter Property="propertyName" Value="{TemplateBinding sourceProperty}" ... />  

XAML 値

説明
propertyName Setter 構文で設定されるプロパティの DependencyProperty.Name
sourceProperty template 宣言された型に存在する、DependencyProperty.Name によって指定された別の依存関係プロパティ。

または

template 宣言された対象の型とは異なる型で定義されている "ドットダウン" プロパティ名。 これは、実際には PropertyPath です。 「PropertyPath の XAML 構文」を参照してください。

解説

TemplateBinding は、テンプレート シナリオ用に最適化された形式の Binding であり、{Binding RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay} を使用して構築された Binding に似ています。 関連するプロパティが既定で双方向のバインディングの場合でも、TemplateBinding は常に一方向のバインディングです。 関連する両方のプロパティは、依存関係プロパティである必要があります。 テンプレート化された親への双方向のバインドを実現するには、代わりに {Binding RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay, Path=MyDependencyProperty} というバインディング ステートメントを使用します。

RelativeSource もマークアップ拡張の 1 つであり、テンプレート内で相対プロパティ バインディングを実行するために、TemplateBinding と組み合わせて使用されたり、その代わりに使用されることがあります。

ここでは説明されていないコントロール テンプレートの概念については、「コントロールのスタイルとテンプレート」を参照してください。

属性構文は、このマークアップ拡張機能で使用される最も一般的な構文です。 TemplateBinding 識別子文字列の後に設定される文字列トークンは、基になる Property 拡張クラスの TemplateBindingExtension 値として割り当てられます。

オブジェクト要素構文を使用することもできますが、現実的な用途がないためここでは触れません。 TemplateBinding は、評価された式を使用して setter 内で値を埋め込むために使用され、TemplateBinding を使用する場合、TemplateBinding が <Setter.Property> プロパティ要素構文を埋め込むためのオブジェクト要素構文は、必要以上に詳細です。

TemplateBinding は、Property プロパティをプロパティおよび値のペアとして指定する詳細出力属性使用でも使用できます。

<object property="{TemplateBinding Property=sourceProperty}" ... />

詳細出力の使用は、複数の設定可能プロパティを持つ拡張機能や、一部のプロパティがオプションである場合に役立ちます。 TemplateBinding には、必須の設定可能プロパティが 1 つしか存在しないため、このような詳細出力の使用は一般的ではありません。

WPF の XAML プロセッサの実装では、このマークアップ拡張の処理は TemplateBindingExtension クラスによって定義されています。

TemplateBinding はマークアップ拡張機能です。 一般にマークアップ拡張機能を実装するのは、属性値をリテラル値やハンドラー名以外にエスケープする要件が存在し、その要件の適用範囲がグローバルで、特定の型やプロパティに型コンバーターを適用するだけにとどまらない場合です。 XAML のすべてのマークアップ拡張では、それぞれの属性構文で {} の 2 つの記号が使用されます。これは規約であり、これに従って XAML プロセッサでは、マークアップ拡張で属性を処理する必要があることが認識されます。 詳細については、「マークアップ拡張機能と WPF XAML」を参照してください。

関連項目