Windows Presentation Foundation (WPF) 提供了 Style 对象和模板对象( FrameworkTemplate 子类)作为定义资源中元素的视觉外观的方法,以便用户可以多次使用它们。 因此,采用 Style FrameworkTemplate 类型的 XAML 中的属性几乎总是对现有样式和模板进行资源引用,而不是定义新的嵌入式样式和模板。

嵌入式样式和模板的限制

在 Extensible Application Markup Language (XAML) 中,样式和模板属性在技术上可通过两种方式之一进行设置。 可以使用属性语法来引用已在资源中定义的样式,例如 < object Style="{StaticResource myResourceKey }" .../> 。 也可以使用属性元素语法来定义嵌入式样式,例如:

< object >

< object .Style>

< Style .../>

属性用法更为常见。 定义为嵌入式且未在资源中定义的样式必须仅限于包含元素,由于没有资源键,因此不能轻易重用它。 通常,资源定义的样式更为通用和有用,并且更符合一般的 Windows Presentation Foundation (WPF) 编程模型原则(即将代码中的程序逻辑与标记中的设计分离)。

通常没有理由设置嵌入式样式或模板,即使你只打算在该位置使用该样式或模板。 大多数可以采用样式或模板的元素也支持内容属性和内容模型。 如果仅使用通过样式或模板创建的任何逻辑树,那么仅用直接标记中的等效子元素填充该内容属性将会更容易。 这样做将完全绕过样式和模板机制。

由返回对象的标记扩展启用的其他语法也可用于样式和模板。 有两种可能的情况的扩展包括 TemplateBinding Binding

  • 样式设置和模板化
  •