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 语法

注解

对于模板方案而言,TemplateBindingBinding 的优化形式,类似于使用 {Binding RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay} 构造的 BindingTemplateBinding 始终为单向绑定,即使所涉及的属性默认为双向绑定。 所涉及的两个属性都必须是依赖项属性。 为了实现对模板化父级的双向绑定,请改用以下绑定语句 {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

另请参阅