TemplateBinding 标记扩展
将控件模板中的属性的值链接到模板化控件上另一个属性的值。
XAML 属性用法
<object property="{TemplateBinding sourceProperty}" ... />
XAML 属性用法(适用于模板或样式中的 Setter 属性)
<Setter Property="propertyName" Value="{TemplateBinding sourceProperty}" ... />
XAML 值
价值 | 描述 |
---|---|
propertyName |
在 setter 语法中定义的属性 DependencyProperty.Name。 |
sourceProperty |
被模板化的类型上存在的另一个由其 DependencyProperty.Name指定的依赖属性。 -或- 一个“dotted-down”属性名称,该名称由与要模板化的目标类型不同的类型定义。 这实际上是一个 PropertyPath。 请参阅 PropertyPath XAML 语法。 |
言论
TemplateBinding
是一种针对模板场景优化的 Binding
,类似于通过 {Binding RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}
构建的 Binding
。 即使涉及的属性默认为双向绑定,TemplateBinding
始终是单向绑定。 所涉及的这两个属性必须是依赖属性。 若要实现与模板化的父元素的双向数据绑定,请改用以下绑定语句 {Binding RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay, Path=MyDependencyProperty}
。
RelativeSource 是另一种标记扩展,有时与 TemplateBinding
结合使用,也有时单独使用,以在模板中执行相对属性绑定。
此处未介绍将控件模板描述为概念;有关详细信息,请参阅 控件样式和模板。
属性语法是用于此标记扩展的最常见语法。 在将 TemplateBinding
标识符字符串分配为基础 TemplateBindingExtension 扩展类的 Property 值之后提供的字符串令牌。
对象元素语法是可能的,但未显示,因为它没有实际的应用程序。 TemplateBinding
用于在 setter 中填充值、使用计算表达式,并使用对象元素语法为 TemplateBinding
和 <Setter.Property>
的属性元素填充值,这种语法显得过于繁琐。
TemplateBinding
还可以在冗长的属性用法中使用,将 Property 属性指定为 property=value 对:
<object property="{TemplateBinding Property=sourceProperty}" ... />
详细用法通常适用于具有多个可设置属性或某些可选属性的扩展。 由于 TemplateBinding
只有一个必需设置的属性,因此此详细用法并不典型。
在 WPF XAML 处理器实现中,此标记扩展的处理由 TemplateBindingExtension 类定义。
TemplateBinding
是标记扩展。 当需要将属性值转义为非字面值或处理程序名称,并且这种需求超出了仅在某些类型或属性上应用类型转换器的情况时,通常会实现标记扩展。 XAML 中的所有标记扩展在其属性语法中使用 {
和 }
字符,这是 XAML 处理器识别标记扩展必须处理该属性的约定。 有关详细信息,请参阅 标记扩展和 WPF XAML。