TemplateBinding Markup Extension

Updated: February 2009

Links the value of a property in a control template to be the value of some other exposed property on the templated control.

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

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

propertyName

DependencyProperty.Name of the property being set in the setter syntax.

targetProperty

A dependency property that exists on the type being templated, specified by its DependencyProperty.Name.

- or -

A "dotted-down" property name that is defined by a different type than the target type being templated. This is actually a PropertyPath. See PropertyPath XAML Syntax.

A TemplateBinding is an optimized form of a Binding for template scenarios, analogous to a Binding constructed with {Binding RelativeSource={RelativeSource TemplatedParent} Mode=OneWay}. The TemplateBinding transfers data from the templated parent to the property that is template bound. If you need to transfer data in the opposite direction or both ways, create a Binding with RelativeSource of TemplatedParent with the Mode property set to OneWayToSource or TwoWay.

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 ControlTemplate Examples.

Attribute syntax is the most common syntax used with this markup extension. 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 arguably possible, but it is not shown because it has no realistic application. 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 can also be used in a verbose attribute usage that specifies the Property property as a property=value pair:

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

The verbose usage is often useful for extensions that have more than one settable property, or if some properties are optional. Because TemplateBinding has only one settable property, which is required, this verbose usage is not typical.

In the WPF XAML processor implementation, the handling for this markup extension is defined by the TemplateBindingExtension class.

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. 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. For more information, see Markup Extensions and XAML.

Date

History

Reason

February 2009

Added information about using a Binding with RelativeSource of TemplatedParent to transfer data from the templated parent to the property that is template bound.

Customer feedback.

Was this page helpful?
(1500 characters remaining)
Thank you for your feedback

Community Additions

ADD
Show:
© 2014 Microsoft