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


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

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

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

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

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

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

Значения XAML

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

-или-

Имя свойства "dotted-down", определенное по-другому типу, чем шаблонируемый целевой тип. Вообще-то это PropertyPath. См.синтаксиса PropertyPath XAML .

Замечания

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 распознает, что расширение разметки должно обрабатывать атрибут. Дополнительные сведения см. в разделе "Расширения разметки" и"WPF XAML".

См. также