TemplateBinding 标记扩展

更新:2007 年 11 月

将控件模板中的属性值链接到在模板控件上公开的某个其他属性的值。

XAML 属性用法

<object property="{TemplateBinding targetProperty}" .../>

XAML 属性 (Attribute) 用法(用于模板或样式中的 Setter 属性 (Property))

<Setter Property="propertyName" Value="{TemplateBinding targetProperty}" .../>

XAML 值

propertyName

在 setter 语法中所设置属性的 DependencyProperty.Name

targetProperty

一个依赖项属性,存在于正对其进行模板化的类型中,由它的 DependencyProperty.Name 指定。

- 或 -

由不同于正进行模板化的目标类型的类型所定义的“暂且记下的”属性名。这实际上是 PropertyPath。请参见 PropertyPath XAML 语法

备注

对于模板方案来说,TemplateBinding 是绑定的优化形式,它与使用 {Binding RelativeSource={RelativeSource TemplatedParent}} 构造的 Binding 相似。

RelativeSource 是另一个标记扩展,有时与 TemplateBinding 结合使用或者用来替代它,以便在模板中执行相对属性绑定。

此处未涉及如何将控件模板作为概念来描述;有关更多信息,请参见 ControlTemplate 示例

属性语法是最常用于该标记扩展的语法。在 TemplateBinding 标识符字符串之后提供的字符串标记被指定为基础 TemplateBindingExtension 扩展类的 Property 值。

经论证可以使用对象元素语法,但是此处没有对其进行演示,因为没有与这样的语法相对应的实际应用程序。TemplateBinding 用于填充 setter 中的值,这样,使用计算表达式以及使用 TemplateBinding 的对象元素语法来填充 <Setter.Property> 属性元素语法就不必太复杂。

TemplateBinding 还可以在将 Property 属性 (Property) 指定为“属性 (Property)=值”对的详细属性 (Attribute) 用法中使用:

<object property="{TemplateBinding Property=targetProperty}" .../>

如果扩展具有一个以上的可设置属性,或者某些属性是可选的,则详细用法通常很有用。由于 TemplateBinding 仅有一个可设置的属性,并且此属性是必需的,因此该详细用法不具有典型性。

在 WPFXAML 处理器实现中,对该标记扩展的处理由 TemplateBindingExtension 类进行定义。

TemplateBinding 是标记扩展。当要求转义属性 (attribute) 值应为非文本值或非处理程序名称时,通常会实现标记扩展,相对于只在某些类型或属性 (property) 上放置类型转换器而言,此要求更具有全局性。XAML 中的所有标记扩展在其属性语法中使用 { 和 } 字符,这是 XAML 处理器确认标记扩展必须处理属性时所遵守的约定。有关更多信息,请参见标记扩展和 XAML

请参见

概念

样式设置和模板化

XAML 概述

标记扩展和 XAML

参考

RelativeSource MarkupExtension

绑定标记扩展

Style

ControlTemplate