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 RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}
构造的 Binding
。 TemplateBinding
始终为单向绑定,即使所涉及的属性默认为双向绑定。 所涉及的两个属性都必须是依赖项属性。 为了实现对模板化父级的双向绑定,请改用以下绑定语句 {Binding RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay, Path=MyDependencyProperty}
。
RelativeSource 是另一个标记扩展,有时与 TemplateBinding
结合使用或者代替它使用,以便在模板中执行相对属性绑定。
此处未介绍控件模板概念;有关详细信息,请参阅控件样式和模板。
特性语法是最常用于该标记扩展的语法。 在 TemplateBinding
标识符字符串之后提供的字符串标记被指定为基础 Property 扩展类的 TemplateBindingExtension 值。
对象元素语法也可行,但因为没有实际的应用,所以未进行演示。 TemplateBinding
用于使用计算的表达式来填充资源库内的值,因此使用 TemplateBinding
的对象元素语法来填充 <Setter.Property>
属性元素语法就会变得繁冗而多余。
TemplateBinding
还可以在详细特性用法中使用,以便将 Property 属性指定为一个 property=value 对:
<object property="{TemplateBinding Property=sourceProperty}" ... />
如果扩展具有一个以上的可设置属性,或者某些属性是可选的,则详细用法通常会很有用。 由于 TemplateBinding
仅有一个可设置的属性,并且此属性是必需的,因此该详细用法不具有典型性。
在 WPF XAML 处理器实现中,对此标记扩展的处理由 TemplateBindingExtension 类定义。
TemplateBinding
是标记扩展。 当要求转义特性值应为非文本值或非处理程序名称时,通常会实现标记扩展,相对于只在某些类型或属性上放置类型转换器而言,此需求更具有全局性。 XAML 中的所有标记扩展在其属性语法中均使用 {
和 }
字符,正是依据这一约定,XAML 处理器认定标记扩展必须处理属性。 有关详细信息,请参阅标记扩展和 WPF XAML。