设置支持模板的控件的样式

通过创建和修改控件模板和样式,可以自定义 Windows Presentation Foundation (WPF) 和 Microsoft Silverlight 控件。这将使应用程序的外观独具特色,而且从整体上保持一致。

模板和样式分别定义了组成控件的各个组件以及控件的默认行为。可以通过生成控件的默认系统样式和模板的副本,来创建模板和样式,这是因为用户不能修改系统样式和模板。修改模板和样式使用户能够轻松创建模板和样式,其实质是在 Microsoft Expression Blend 的“设计”视图中生成新控件,而无需使用代码。

样式与模板之间的差异

下表提供了详细的样式与模板比较结果,有助于确定是修改控件的样式、模板,还是同时修改这两者:

特性 样式 模板

用途

通过使用样式,可以对应用该样式的控件的默认属性值加以修改。例如,可以指定控件(如按钮)的背景、边框和前景的默认颜色。

可以使用在美工板上绘制控件时为控件设置的值来取代这些样式属性。例如,如果在按钮的样式中将背景颜色设置为蓝色,则在美工板上绘制该按钮时,它将显示为蓝色,但用户可以更改其颜色。

只能在样式中设置已经存在的属性。例如,不能为属于用户添加到模板中的新部件的属性设置默认值。

最后,可以使用样式来指定控件的默认行为。例如,在按钮的样式中,可以指定一个触发器,以便在用户将指针移到按钮上时更改背景色。这些属性更改是瞬时完成的(不能动态渐变)。

可以使用模板,修改应用该模板的控件的结构。可以修改控件模板,以重排、添加或删除控件中的对象(或部件)。例如,可以向控件(如按钮)中添加背景图像或设计。

也可以对应用模板的控件的属性(如背景颜色)值加以修改。不能使用在美工板上绘制控件时为控件设置的值来取代这些模板值。但是,可以根据在美工板上绘制控件时该控件的属性值,使用模板绑定来设置模板的属性。

修改模板时,可以比修改样式时访问更多的控件部分。例如,可以通过修改项模板,更改组合框中弹出列表的显示方式,或更改在组合框中触发弹出列表的按钮的外观。有些模板包含下列部件:

  • ContentPresenter    内容展示区是控件模板中的占位符,用于显示应用模板的控件的内容。显示的内容可能是内容属性(例如在按钮中)或文本属性(例如在文本框中)的值。

  • Header    有些控件具有多个可以包含内容的属性。在这种情况下,会在模板中使用另一个内容展示区,作为用作标题的内容类型的占位符。带标题控件的示例包括选项卡项控件,在此控件中,标题是选项卡上的标签,而内容显示在标题之下。

  • ItemsHost    项目承载区用作控件子对象的占位符。模板的项目承载区部件由“属性”面板中的 IsItemsHost = True 加以标识。

  • ItemContainerTemplate    项容器模板可应用于包含多个项的控件,如 MenuList 控件。该模板在向列表中添加项时使用。

最后,可以使用触发器在模板中指定所有新部件和现有部件的行为。例如,可以指定触发器,以便在用户将指针移到按钮上时,更改其中一个部件的颜色。这些属性改变可以瞬时完成,也可以动态变化以产生平滑过渡效果。

Note注意:
不能从模板绑定属性或颜色资源的值动态变化到其他值。在触发器中使用动画时,请使用特定的属性值。

编辑方式

可通过下列方式进入样式的编辑模式:

使用菜单

  1. 在“对象和时间线”面板中,选择控件。

  2. 在“对象”菜单上,指向“编辑样式”。

  3. 执行下列操作之一:

    • 单击“编辑当前样式”(如果希望更改当前已应用于该控件的样式)

    • 单击“编辑副本”(以同时创建当前已应用于该控件的样式的新副本,并将新样式应用于该控件)。

如果该控件应用的是系统样式,则“编辑样式”选项将不可用。

有关示例,请参阅创建样式

使用“资源”面板(修改现有样式)

  • 在“资源”面板中,找到样式,然后单击该样式旁边的“编辑资源”按钮。

Note注意:
样式和模板都属于资源,可通过不同方式应用于控件,并且可以存储在应用程序中的不同位置。有关创建样式的示例,请参阅创建样式

可通过下列方式进入控件模板的编辑模式:

使用菜单

  1. 在“对象和时间线”面板中,选择控件。

  2. 执行下列操作之一:

    • 在“对象”菜单上,指向“编辑模板”。

    • 右键单击该控件,指向“编辑模板”。

  3. 单击“编辑当前模板”(如果希望修改当前已应用于该控件的模板),或者单击“编辑副本”(以同时创建当前已应用于该控件的模板的新副本,并将新模板应用于该控件)。如果该控件应用的是系统模板,则“编辑当前模板”选项将不可用。

    有关示例,请参阅创建或修改模板

使用“资源”面板(修改现有模板)

  1. 在“资源”面板中,找到包含该模板的样式,然后单击该样式旁边的“编辑资源”按钮。

  2. 在“对象和时间线”面板中,右键单击“Style”对象,指向“编辑模板”,然后单击“编辑当前模板”。

tip note提示:
控件模板封装在样式中,以便应用于控件的样式同时包含控件的外观(部件)和行为。单击“编辑当前模板”而不是“编辑副本”,因为样式的副本包含了模板。若要返回到主文档的编辑范围,必须单击“返回到范围”Cc295273.55844eb3-ed98-4f20-aa66-a6f5b23eeb2b(zh-cn,Expression.40).png 两次,这是因为第一次单击将回到样式的编辑模式。
Note注意:
样式和模板都属于资源,可通过不同方式应用于控件,并且可以存储在应用程序中的不同位置。有关创建模板的示例,请参阅创建或修改模板

应用方式

可通过下列方式向美工板上的控件应用现有样式:

使用菜单

  1. 在“对象和时间线”面板中,选择控件。

  2. 在“对象”菜单上,指向“编辑样式”,指向“应用资源”,然后从显示的下拉列表中选择样式。该下拉列表仅显示可应用于选定控件的样式。例如,不能向按钮应用文本框样式。

使用“资产”面板在美工板上绘制带样式的控件

  1. 可以通过单击“资产”Cc295273.0d8b8d29-1af9-418f-8741-be3097d76eab(zh-cn,Expression.40).png 来打开“资产”面板。

  2. 执行下列操作之一:

    • 如果样式是在当前使用的文档中创建的,请单击“样式”类别。

    • 如果样式是在资源字典中创建的,请展开“样式”类别,然后单击字典名称。

  3. 选择所需的样式,然后在美工板上进行绘制。

可通过下列方式向美工板上的控件应用现有模板:

使用菜单

  1. 在“对象和时间线”面板中,选择控件。

  2. 在“对象”菜单上,指向“编辑模板”,指向“应用资源”,然后从显示的下拉列表中选择模板。该下拉列表仅显示可应用于选定控件的模板。例如,不能向按钮应用文本框模板。

使用“资产”面板在美工板上绘制带模板的控件

模板包含在样式中。若要向美工板上的控件应用模板,请使用与应用样式相同的方法。

Expression Blend 包含一组简单样式和模板,这些样式和模板封装在 WPF 项目的一个资源字典中。可以使用资源字典来设计应用程序的主题。有关详细信息,请参阅本主题后面的“简单样式和资源字典”一节。

修改样式和模板

在 Expression Blend 中,当处于样式或模板的编辑范围中时,美工板的左上角将显示一个痕迹导航栏。

选定了模板编辑模式的痕迹导航栏

Cc295273.eb50efd9-44c6-41f9-8f50-7d40f6c42e61(zh-cn,Expression.40).png

通过单击痕迹导航栏上的按钮,可以快速地进入模板编辑模式、样式编辑模式以及选定对象的对象编辑范围。对于应用了自定义样式或模板的任何选定对象,都会显示痕迹导航栏。

有关如何修改样式或模板的信息,请参阅编辑样式创建或修改模板

最佳实践

在修改样式或模板时,请确保采用下面的最佳实践:

  • 除非只更改颜色画笔,否则应避免更改现有触发器。

  • 请勿重命名或修改其名称以“PART_”开头的任何对象,因为在实现控件的代码中会引用这些对象。

  • 请勿删除任何帮助程序对象,例如 SimpleTabControl 中的 TabPanel 或者 SimpleScrollBar 中的 Track 。这些对象必须存在,才能保留相应控件的功能。

  • 请勿重置或更改“属性”面板中的任何绑定。这些绑定由属性周围的黄色突出显示框标识,或者由黄色的“高级选项”按钮 Cc295273.e3343378-f63e-4d8f-9847-97c1a58aadc5(zh-cn,Expression.40).png 标识。模板绑定用于将模板中的属性绑定到应用该模板的控件的属性。

  • 如果模板包含 Presenter 对象(如 ContentPresenterItemsPresenter 对象),则务必在模板中保留该对象。Presenter 对象将显示应用该模板的控件中定义的内容。

Caution note小心:

在修改样式和模板时,应牢记这些关键点,以免破坏应用样式或模板的系统控件的功能。

主题

主题是能够令用户界面控件的外观从整体上保持统一的一组样式和模板。

为了确定控件(如按钮)的外观,应用程序将搜索下列位置:

  1. 为控件设置的属性 例如,如果要在 Expression Blend 中创建一个按钮,然后直接更改按钮的背景色。直接为控件设置属性,会取代在其他任何位置为该属性设置的任何值。

  2. 在控件所使用的自定义样式或模板中设置的属性 例如,如果要在 Expression Blend 中创建一个按钮,然后修改模板的副本,以便在模板中设置背景色。如果未直接为该按钮设置背景属性,则此背景颜色就会用于该按钮。可以在包含控件的文档中定义资源,也可以在应用程序级别定义资源(以便资源能够由应用程序中的所有文档使用)。文档级资源将取代应用程序级资源。

  3. 在控件所使用的系统模板中设置的属性   WPF 根据主题(即根据操作系统)来确定系统模板。

简单样式和资源字典

Note注意:

Silverlight 项目中不支持简单样式。

可以通过在称为“资源字典” ** 的单个文件中创建属性、样式和模板资源,来有效地创建主题。通过使用资源字典,可以在多个应用程序之间重用主题。还可以通过定义多个资源字典以提供类型相同但值不同的资源,来创建各种互换主题。例如,Expression Blend 应用程序自身对“深色”主题和“浅色”主题使用不同的资源字典,可通过单击“工具”菜单上的“选项”,然后更改“工作区”的“主题”,从而切换这两种主题。

对于用户自己的应用程序,Expression Blend 提供了一个名为“SimpleStyles.xaml”的、可以直接使用的资源字典,该字典包含常用控件(如按钮、列表框及其他控件)的一组样式。可以在“资产”面板的“样式”类别中的“简单样式”下访问这些样式。使用一种简单样式在美工板上绘制控件时,会同时创建该控件的系统版本并应用该简单样式。例如,如果在美工板上创建 Button 系统控件,则产生的可扩展应用程序标记语言 (XAML) 如下所示:

<Button Content="Button" ... />

如果在美工板上创建 SimpleButton ,则产生的 XAML 中将包含对 SimpleButton 样式的引用:

<Button Content="Button" 
    Style="{DynamicResource SimpleButton}"
   ... />

向美工板添加简单样式控件之后,SimpleStyles.xaml 资源字典文件将添加到项目中,并且将链接到 app.xaml 文件,以便这些样式定义在应用程序范围中。可以在“资源”面板中查看所有样式。

有关如何管理资源的详细信息,请参阅创建可重用资源

另请参阅

概念

WPF 简单样式的样式提示
常用 Silverlight 控件的样式提示

Microsoft Corporation 版权所有 ⓒ 2011。保留所有权利。