常用 Silverlight 控件的样式提示
Microsoft Expression Blend 附带了许多 Microsoft Silverlight 控件,您可以使用这些控件来创建出色的用户体验。您也可以从受信任的来源下载控件。
有关详细信息,请参阅通过添加引用来导入自定义控件。
如果您发现某个控件在功能上适合您的需求,但外观却不符合要求,并且该控件支持模板,则可以修改该控件的模板来更改其外观。
为了简化操作,您可以先使用绘制工具在美工板上绘制所有内容,并导入图片或其他资产,从而集中精力进行设计。完成之后,您可以使用“构成控件”命令将对象转换为任何控件的模板。
模板绑定
控件具有一些属性,可将模板中的对象绑定到这些属性。这称为“模板绑定” ** 。通过将模板的部件绑定到控件,可以有效地为模板创建参数。例如,您可说“此 Rectangle 与控件 Background 的颜色相同”,而不是说“此 Rectangle 为蓝色”。因此,当您将模板应用于具有不同 Background 属性的控件时,结果将生成颜色不同的模板。
若要将模板绑定到属性,请在模板中选择一个对象,在“属性”面板中单击“高级选项”,然后从“模板绑定”中选择一个属性。
某些属性(例如 OpacityMask 、 Font 、 FontSize 、 LayoutTransform 和 RenderTransform )不必绑定模板。这些属性将自动应用于模板中的对象。
Content 和 Header 属性
一些控件包含 Content 属性(例如, Button 、 CheckBox 和 RadioButton )或 Header 属性( TabItem 和 MenuItem )。 Content 和 Header 属性可用于显示任何类型的内容。
显示任何种类的内容
如果要显示任何种类的内容(而不只是文本),模板中将需要有一个具有 Content (或 Header )属性的 ContentPresenter ,该属性可用模板绑定到控件的 Content (或 Header )属性。如果使用“构成控件”使作品构成模板,则 Expression Blend 会向模板中添加“ContentPresenter”。如果使用 TextBlock 来显示内容,请在使作品构成控件后删除“TextBlock”。“ContentPresenter”将显示之前显示在 TextBlock 中的内容。
显示文本
如果只希望显示文本,您可以使用 TextBlock ,而不是 ContentPresenter 。将 TextBlock 置于模板中,然后用模板将 TextBlock 的 Text 属性绑定到 Button 的 Content (或 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 控件的实例。
可视状态
状态组中的各个可视状态是互斥的。但是,任何组中的状态都独立于任何其他组中的状态。这意味着在任一时刻可以应用每个组中的任意一个状态,而不会产生冲突。
常见做法是更改处于同一组中多个状态的对象的属性。例如,您可以针对 MouseOver 、 Pressed 和 Disabled 状态更改 Rectangle 的 Fill 属性。这样做之所以有效,原因是同一时刻只应用了 CommonStates 状态组中的一个状态。但是,更改处于多个状态组中的对象的属性会破坏状态组的独立特性,并导致多个状态尝试同时设置同一对象的属性的冲突。检测到状态冲突时,Expression Blend 将显示警告。
重要须知: |
---|
每个状态名称在模板中(甚至在各个状态组中)都必须是唯一的。 |
正常可视状态
每个状态组都有默认状态。例如, CommonStates 具有 Normal 状态,而 CheckedStates 具有 Unchecked 状态。在修改对象的属性时,最好保持默认状态不变。例如,对于复选框,复选标记和复选框矩形在 Base 中为空(隐藏),并显示为 Checked (对于复选标记)和 Focused (对于复选框矩形)。
请注意, Base 不是状态。因此,您无法定义或控制到 Base 的过渡和从中进行的过渡。例如,由于 Base 不是状态,因此您无法定义从 Base 到 MouseOver 的过渡。 Base 表示处于其基本形式(未应用任何状态)的模板。只有在定义过渡时,才应考虑状态。
在创建自己的控件模板时,您应在每个状态组中定义一个正常状态,并让控件在加载时默认为该正常状态。如果控件(例如, Button )在加载时未处于其正常状态,则过渡(例如,从 Normal 状态到 MouseOver 状态)将不会运行。
本节内容
另请参阅
概念
定义控件的不同视觉状态
设置 Silverlight 控件模板部件的样式
设置支持模板的控件的样式
WPF 简单样式的样式提示
Microsoft Corporation 版权所有 ⓒ 2011。保留所有权利。