Расширение разметки TemplateBinding
Связывает значение свойства в шаблоне элемента управления со значением другого свойства элемента управления-шаблона.
Использование атрибута XAML
<object property="{TemplateBinding sourceProperty}" .../>
Использование атрибута XAML (для свойства Setter в шаблоне или стиле)
<Setter Property="propertyName" Value="{TemplateBinding sourceProperty}" .../>
Значения XAML
propertyName |
DependencyProperty.Name задаваемое в синтаксисе метода задания свойства. |
sourceProperty |
Другое свойство зависимостей для типа, который используется в качестве шаблона, задается с помощью DependencyProperty.Name. -или- "Краткое" имя свойства, которое определяется типом, отличным от целевого шаблонного типа. Фактически это PropertyPath. См. в разделе синтаксис PropertyPath XAML. |
Примечания
Объект TemplateBinding
является оптимизированной формой привязки для сценариев шаблонов, аналогично Binding
создан с параметром {Binding RelativeSource={RelativeSource TemplatedParent}}
. TemplateBinding
всегда является односторонней привязкой, даже если используемые свойства по умолчанию используют двустороннюю привязку. Оба используемых свойства должны быть свойствами зависимостей. Чтобы добиться двухстороннюю привязку для шаблонного родительского элемента следующая инструкция привязки вместо этого используйте {Binding RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay, Path=MyDependencyProperty}
.
RelativeSource является еще одним расширением разметки, которое иногда используется в сочетании с или instead of TemplateBinding
для выполнения относительной привязки свойства в шаблоне.
Шаблоны элементов управления в качестве концепции здесь нет; Дополнительные сведения см. в разделе управления стили и шаблоны.
Синтаксис атрибутов является наиболее распространенным синтаксисом, используемым с этим расширением разметки. Строковая лексема, указываемая после строки идентификатора TemplateBinding
, присваивается в качестве значения Property соответствующего класса расширения TemplateBindingExtension.
Синтаксис элемента объекта возможен, но он не рассматривается из-за отсутствия практического применения. TemplateBinding
используется для заполнения значений в методах установки значений, с помощью вычисленных выражений, а также с помощью синтаксиса объектных элементов для TemplateBinding
для заполнения <Setter.Property>
синтаксис элемента свойства является излишним.
TemplateBinding
Можно также использовать в использовании атрибут verbose, который указывает Property как свойство = значение пары:
<object property="{TemplateBinding Property=sourceProperty}" .../>
Подробное определение зачастую удобно использовать для расширений, которые имеют несколько устанавливаемых свойств, а также в том случае, если некоторые свойства являются необязательными. Так как TemplateBinding
имеет только одно устанавливаемое свойство, которое является обязательным, это использование не является типичным.
В WPF реализации обработчика XAML обработка данного расширения разметки определяется TemplateBindingExtension класса.
TemplateBinding
является расширением разметки. Расширения разметки обычно реализуются, если требуется заменить значения атрибутов на нелитеральные значения или имена обработчиков и если требуется больше, чем простая настройка преобразователей типов на работу с определенными типами или свойствами. Все расширения разметки в XAML используют {
и }
символов в синтаксисе их атрибутов, который является соглашением, по которому обработчик XAML узнает, что расширение разметки должно обработать атрибут. Дополнительные сведения см. в разделе Расширения разметки и XAML WPF.