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
。
样式设置和模板化