常用 Silverlight 控件的样式提示

Ee371156.0b2c798e-86c6-4ea2-a8a6-5cf1f12be1e2(zh-cn,Expression.40).png

Microsoft Expression Blend 附带了许多 Microsoft Silverlight 控件,您可以使用这些控件来创建出色的用户体验。您也可以从受信任的来源下载控件。

有关详细信息,请参阅通过添加引用来导入自定义控件

如果您发现某个控件在功能上适合您的需求,但外观却不符合要求,并且该控件支持模板,则可以修改该控件的模板来更改其外观。

为了简化操作,您可以先使用绘制工具在美工板上绘制所有内容,并导入图片或其他资产,从而集中精力进行设计。完成之后,您可以使用“构成控件”命令将对象转换为任何控件的模板。

模板绑定

控件具有一些属性,可将模板中的对象绑定到这些属性。这称为“模板绑定” ** 。通过将模板的部件绑定到控件,可以有效地为模板创建参数。例如,您可说“此 Rectangle 与控件 Background 的颜色相同”,而不是说“此 Rectangle 为蓝色”。因此,当您将模板应用于具有不同 Background 属性的控件时,结果将生成颜色不同的模板。

若要将模板绑定到属性,请在模板中选择一个对象,在“属性”面板中单击“高级选项”,然后从“模板绑定”中选择一个属性。

某些属性(例如 OpacityMaskFontFontSizeLayoutTransformRenderTransform )不必绑定模板。这些属性将自动应用于模板中的对象。

Content 和 Header 属性

一些控件包含 Content 属性(例如, ButtonCheckBoxRadioButton )或 Header 属性( TabItemMenuItem )。 ContentHeader 属性可用于显示任何类型的内容。

显示任何种类的内容

如果要显示任何种类的内容(而不只是文本),模板中将需要有一个具有 Content (或 Header )属性的 ContentPresenter ,该属性可用模板绑定到控件的 Content (或 Header )属性。如果使用“构成控件”使作品构成模板,则 Expression Blend 会向模板中添加“ContentPresenter”。如果使用 TextBlock 来显示内容,请在使作品构成控件后删除“TextBlock”。“ContentPresenter”将显示之前显示在 TextBlock 中的内容。

显示文本

如果只希望显示文本,您可以使用 TextBlock ,而不是 ContentPresenter 。将 TextBlock 置于模板中,然后用模板将 TextBlockText 属性绑定到 ButtonContent (或 Header )属性。如果使用“构成控件”使作品构成模板,并且使用 TextBlock 来显示内容,请删除 Expression Blend 向模板中添加的“ContentPresenter”。当您将文本添加到应用了此样式的控件的 Content (或 Header )属性时, TextBlock 将显示该文本。

构成 ContentControl

当您使用“构成控件”将包含 TextBlock 对象的作品转换为 ContentControl (例如,按钮)的模板时,Expression Blend 将执行下列操作:

  • ContentPresenter 置于模板中,替代 TextBlock

  • 将“Layout”属性从 TextBlock 复制到 ContentPresenter

  • Typography 属性从 TextBlock 复制到控件的样式。

  • Text 属性从 TextBlock 复制到控件的 Content 属性的实例。

构成 TextBox

当您使用“构成控件”将包含 TextBlock 对象的作品转换为 TextBox 的模板时,Expression Blend 将执行下列操作:

  • 将表示 ContentElement 部件的 ScrollViewer 置于模板中,替代 TextBlock

  • 将“Layout”属性从 TextBlock 复制到 ContentElement 部件。

  • Typography 属性从 TextBlock 复制到 TextBox 样式。

  • Text 属性从 TextBlock 复制到 TextBox 控件的实例。

可视状态

状态组中的各个可视状态是互斥的。但是,任何组中的状态都独立于任何其他组中的状态。这意味着在任一时刻可以应用每个组中的任意一个状态,而不会产生冲突。

常见做法是更改处于同一组中多个状态的对象的属性。例如,您可以针对 MouseOverPressedDisabled 状态更改 RectangleFill 属性。这样做之所以有效,原因是同一时刻只应用了 CommonStates 状态组中的一个状态。但是,更改处于多个状态组中的对象的属性会破坏状态组的独立特性,并导致多个状态尝试同时设置同一对象的属性的冲突。检测到状态冲突时,Expression Blend 将显示警告。

important note重要须知:

每个状态名称在模板中(甚至在各个状态组中)都必须是唯一的。

正常可视状态

每个状态组都有默认状态。例如, CommonStates 具有 Normal 状态,而 CheckedStates 具有 Unchecked 状态。在修改对象的属性时,最好保持默认状态不变。例如,对于复选框,复选标记和复选框矩形在 Base 中为空(隐藏),并显示为 Checked (对于复选标记)和 Focused (对于复选框矩形)。

请注意, Base 不是状态。因此,您无法定义或控制到 Base 的过渡和从中进行的过渡。例如,由于 Base 不是状态,因此您无法定义从 BaseMouseOver 的过渡。 Base 表示处于其基本形式(未应用任何状态)的模板。只有在定义过渡时,才应考虑状态。

在创建自己的控件模板时,您应在每个状态组中定义一个正常状态,并让控件在加载时默认为该正常状态。如果控件(例如, Button )在加载时未处于其正常状态,则过渡(例如,从 Normal 状态到 MouseOver 状态)将不会运行。

本节内容

另请参阅

概念

定义控件的不同视觉状态
设置 Silverlight 控件模板部件的样式
设置支持模板的控件的样式
WPF 简单样式的样式提示

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