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

コントロール テンプレート内のプロパティの値を、template 宣言されたコントロールの別のプロパティの値にリンクします。Links the value of a property in a control template to be the value of another property on the templated control.

XAML 属性の使用方法XAML Attribute Usage

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

XAML 属性の使用方法 (テンプレートまたはスタイルの Setter プロパティの場合)XAML Attribute Usage (for Setter property in template or style)

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

XAML 値XAML Values

propertyName Setter 構文で設定されるプロパティの DependencyProperty.NameDependencyProperty.Name of the property being set in the setter syntax.
sourceProperty template 宣言された型に存在する、DependencyProperty.Name によって指定された別の依存関係プロパティ。Another dependency property that exists on the type being templated, specified by its DependencyProperty.Name.

または- or -

template 宣言された対象の型とは異なる型で定義されている "ドットダウン" プロパティ名。A "dotted-down" property name that is defined by a different type than the target type being templated. これは、実際には PropertyPath です。This is actually a PropertyPath. PropertyPath の XAML 構文」を参照してください。See PropertyPath XAML Syntax.

RemarksRemarks

TemplateBinding は、テンプレート シナリオ用に最適化された形式の Binding であり、{Binding RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay} を使用して構築された Binding に似ています。A TemplateBinding is an optimized form of a Binding for template scenarios, analogous to a Binding constructed with {Binding RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}. 関連するプロパティが既定で双方向のバインディングの場合でも、TemplateBinding は常に一方向のバインディングです。A TemplateBinding is always a one-way binding, even if properties involved default to two-way binding. 関連する両方のプロパティは、依存関係プロパティである必要があります。Both properties involved must be dependency properties. テンプレート化された親への双方向のバインドを実現するには、代わりに {Binding RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay, Path=MyDependencyProperty} というバインディング ステートメントを使用します。In order to achieve two-way binding to a templated parent use the following binding statement instead {Binding RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay, Path=MyDependencyProperty}.

RelativeSource もマークアップ拡張の 1 つであり、テンプレート内で相対プロパティ バインディングを実行するために、TemplateBinding と組み合わせて使用されたり、その代わりに使用されることがあります。RelativeSource is another markup extension that is sometimes used in conjunction with or instead of TemplateBinding in order to perform relative property binding within a template.

ここでは説明されていないコントロール テンプレートの概念については、「コントロールのスタイルとテンプレート」を参照してください。Describing control templates as a concept is not covered here; for more information, see Control Styles and Templates.

属性構文は、このマークアップ拡張機能で使用される最も一般的な構文です。Attribute syntax is the most common syntax used with this markup extension. TemplateBinding 識別子文字列の後に設定される文字列トークンは、基になる Property 拡張クラスの TemplateBindingExtension 値として割り当てられます。The string token provided after the TemplateBinding identifier string is assigned as the Property value of the underlying TemplateBindingExtension extension class.

オブジェクト要素構文を使用することもできますが、現実的な用途がないためここでは触れません。Object element syntax is possible, but it is not shown because it has no realistic application. TemplateBinding は、評価された式を使用して setter 内で値を埋め込むために使用され、TemplateBinding を使用する場合、TemplateBinding が <Setter.Property> プロパティ要素構文を埋め込むためのオブジェクト要素構文は、必要以上に詳細です。TemplateBinding is used to fill values within setters, using evaluated expressions, and using object element syntax for TemplateBinding to fill <Setter.Property> property element syntax is unnecessarily verbose.

TemplateBinding は、Property プロパティをプロパティおよび値のペアとして指定する詳細出力属性使用でも使用できます。TemplateBinding can also be used in a verbose attribute usage that specifies the Property property as a property=value pair:

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

詳細出力の使用は、複数の設定可能プロパティを持つ拡張機能や、一部のプロパティがオプションである場合に役立ちます。The verbose usage is often useful for extensions that have more than one settable property, or if some properties are optional. TemplateBinding には、必須の設定可能プロパティが 1 つしか存在しないため、このような詳細出力の使用は一般的ではありません。Because TemplateBinding has only one settable property, which is required, this verbose usage is not typical.

WPFWPF の XAML プロセッサの実装では、このマークアップ拡張の処理は TemplateBindingExtension クラスによって定義されています。In the WPFWPF XAML processor implementation, the handling for this markup extension is defined by the TemplateBindingExtension class.

TemplateBinding はマークアップ拡張機能です。TemplateBinding is a markup extension. 一般にマークアップ拡張機能を実装するのは、属性値をリテラル値やハンドラー名以外にエスケープする要件が存在し、その要件の適用範囲がグローバルで、特定の型やプロパティに型コンバーターを適用するだけにとどまらない場合です。Markup extensions are typically implemented when there is a requirement to escape attribute values to be other than literal values or handler names, and the requirement is more global than just putting type converters on certain types or properties. XAML のすべてのマークアップ拡張では、それぞれの属性構文で {} の 2 つの記号が使用されます。これは規約であり、これに従って XAML プロセッサでは、マークアップ拡張で属性を処理する必要があることが認識されます。All markup extensions in XAML use the { and } characters in their attribute syntax, which is the convention by which a XAML processor recognizes that a markup extension must process the attribute. 詳細については、「マークアップ拡張機能と WPF XAML」を参照してください。For more information, see Markup Extensions and WPF XAML.

関連項目See also