Расширение разметки TemplateBindingTemplateBinding Markup Extension

Связывает значение свойства в шаблоне элемента управления со значением другого свойства элемента управления-шаблона.Links the value of a property in a control template to be the value of another property on the templated control.

Использование атрибута XAMLXAML Attribute Usage

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

Использование атрибута XAML (для свойства Setter в шаблоне или стиле)XAML Attribute Usage (for Setter property in template or style)

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

Значения XAMLXAML Values

propertyName DependencyProperty.Name для свойства задается в синтаксисе метода задания значения.DependencyProperty.Name of the property being set in the setter syntax.
sourceProperty Другое свойство зависимостей для типа, который используется в качестве шаблона, задается с помощью DependencyProperty.Name.Another 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. Фактически это PropertyPath.This is actually a PropertyPath. См. раздел синтаксис языка XAML PropertyPath.See PropertyPath XAML Syntax.

ЗаметкиRemarks

TemplateBinding — это оптимизированная форма привязки для сценариев шаблонов, аналогичная Binding, созданной с помощью {Binding RelativeSource={RelativeSource TemplatedParent}}.A TemplateBinding is an optimized form of a Binding for template scenarios, analogous to a Binding constructed with {Binding RelativeSource={RelativeSource TemplatedParent}}. 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 — это еще одно расширение разметки, которое иногда используется вместе с или вместо 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 используется для заполнения значений в методах установки значений с помощью вычисленных выражений. Использование синтаксиса элемента объекта для 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 имеет только одно устанавливаемое свойство, которое является обязательным, это использование не является типичным.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 используют { и } символов в синтаксисе атрибутов, который является соглашением, по которому обработчик 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. Дополнительные сведения см. в разделе Расширения разметки и XAML WPF.For more information, see Markup Extensions and WPF XAML.

См. такжеSee also