Поделиться через


Расширение разметки TemplateBinding

Связывает значение свойства в шаблоне элемента управления со значением другого свойства элемента управления-шаблона.

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

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

Использование атрибута XAML (для свойства Setter в шаблоне или стиле)

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

Значения XAML

значение Описание
propertyName DependencyProperty.Name для свойства задается в синтаксисе метода задания значения.
sourceProperty Другое свойство зависимостей для типа, который используется в качестве шаблона, задается с помощью DependencyProperty.Name.

- или -

"Краткое" имя свойства, которое определяется типом, отличным от целевого шаблонного типа. Фактически это PropertyPath. См. раздел Синтаксис PropertyPath в XAML.

Замечания

A TemplateBinding — это оптимизированная форма Binding для сценариев шаблона, аналогичная построенному Binding с {Binding RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}помощью. TemplateBinding всегда является односторонней привязкой, даже если используемые свойства по умолчанию используют двустороннюю привязку. Оба используемых свойства должны быть свойствами зависимостей. Чтобы получить двустороннюю привязку к шаблонному родительскому элементу, используйте следующую инструкцию привязки вместо {Binding RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay, Path=MyDependencyProperty}.

RelativeSource является еще одним расширением разметки, которое иногда используется в сочетании с TemplateBinding или вместо нее для выполнения относительной привязки свойства в шаблоне.

Шаблоны элементов управления в данном разделе не рассматриваются. Дополнительные сведения см. в разделе Стили и шаблоны элемента управления.

Синтаксис атрибутов является наиболее распространенным синтаксисом, используемым с этим расширением разметки. Строковая лексема, указываемая после строки идентификатора TemplateBinding, присваивается в качестве значения Property соответствующего класса расширения TemplateBindingExtension.

Синтаксис элемента объекта возможен, но он не рассматривается из-за отсутствия практического применения. TemplateBinding используется для заполнения значений в методах установки значений с помощью вычисленных выражений. Использование синтаксиса элемента объекта для TemplateBinding для заполнения синтаксиса элемента свойства <Setter.Property> является излишним.

Излишним может оказаться и использование TemplateBinding в атрибуте, в котором свойство Property определено как пара "свойство=значение".

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

Подробное определение зачастую удобно использовать для расширений, которые имеют несколько устанавливаемых свойств, а также в том случае, если некоторые свойства являются необязательными. Так как TemplateBinding имеет только одно устанавливаемое свойство, которое является обязательным, это использование не является типичным.

В реализации обработчика XAML WPF обработка данного расширения разметки определяется классом TemplateBindingExtension.

TemplateBinding является расширением разметки. Расширения разметки обычно реализуются, если требуется заменить значения атрибутов на нелитеральные значения или имена обработчиков и если требуется больше, чем простая настройка преобразователей типов на работу с определенными типами или свойствами. Все расширения разметки в XAML используют символы { и } в синтаксисе их атрибутов, который является соглашением, по которому обработчик XAML узнает, что расширение разметки должно обработать атрибут. Дополнительные сведения см. в разделе Расширения разметки и XAML WPF.

См. также