Расширение разметки 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.
См. также
.NET Desktop feedback