使用视觉样式呈现控件
.NET Framework 提供对使用支持的操作系统中的视觉样式呈现控件和其他 Windows 用户界面 (UI) 元素的支持。 本主题讨论 .NET Framework 中对使用操作系统的当前视觉样式呈现控件及其他用户界面元素的多种级别的支持。
呈现公共控件的类
呈现控件是指绘制控件的用户界面。 System.Windows.Forms 命名空间提供了用来呈现某些 Windows 窗体公共控件的 ControlPaint 类。 但是,此类以经典的 Windows 样式绘制控件,当在启用了视觉样式的应用程序中绘制自定义控件时,这种方式将难以保持一致的用户界面体验。
.NET Framework 2.0 在 System.Windows.Forms 命名空间中包含了能够使用视觉样式呈现公共控件的部件和状态的类。 这些类中的每一个都包含一些 static 方法,这些方法使用操作系统的当前视觉样式绘制处于特定状态的控件或控件的部件。
这些类中的某一些专门用来绘制相关控件,而无论视觉样式是否可用。 如果视觉样式被启用,则类成员将使用视觉样式绘制相关控件;如果视觉样式被禁用,则类成员将以经典的 Windows 样式绘制控件。 这些类包括:
其他类只有在视觉样式可用时才能绘制相关控件,如果视觉样式禁用,这些类的成员将引发异常。 这些类包括:
有关使用这些类绘制控件的更多信息,请参见 如何:使用控件呈现类。
视觉样式元素和呈现类
System.Windows.Forms.VisualStyles 命名空间包含了一些类,这些类可用来绘制受视觉样式支持的任何控件或用户界面元素,并获取有关它们的信息。 受支持的控件包括在 System.Windows.Forms 命名空间中有呈现类的公共控件(请参见上一节),以及选项卡控件和 rebar 控件之类的其他控件。 其他受支持的用户界面元素包括**“开始”**菜单、任务栏以及窗口的非工作区的部件。
System.Windows.Forms.VisualStyles 命名空间的主类是 VisualStyleElement 和 VisualStyleRenderer。 VisualStyleElement 是一个基础类,用于标识视觉样式支持的任何控件或用户界面元素。 除了 VisualStyleElement 本身外,System.Windows.Forms.VisualStyles 命名空间包含了很多 VisualStyleElement 的嵌套类,这些类包含为视觉样式所支持的控件、控件部件或其他用户界面元素的每一种状态返回一个 VisualStyleElement 的 static 属性。
VisualStyleRenderer 提供了一些方法,可以用来绘制由操作系统的当前视觉样式定义的每一种 VisualStyleElement,并获取有关它们的信息。 可以检索的元素信息包括元素的默认大小、背景类型及颜色定义。 VisualStyleRenderer 包装了 Windows Platform SDK 的 Windows Shell 部分中的视觉样式 (UxTheme) API 的功能。 有关更多信息,请参见位于 https://msdn.microsoft.com/zh-cn/library/default.aspx 上的 MSDN Library 的 Platform SDK 部分中的“Using Windows XP Visual Styles”(使用 Windows XP 视觉样式)。
有关使用 VisualStyleRenderer 和 VisualStyleElement 的更多信息,请参见 如何:呈现视觉样式元素。
启用视觉样式
若要为针对 .NET Framework 1.0 版编写的应用程序启用视觉样式,程序员必须包含一个应用程序清单,该清单指定将使用 ComCtl32.dll 版本 6 或更高版本绘制控件。 使用 .NET Framework 1.1 版或更高版本生成的应用程序可使用 Application 类的 Application.EnableVisualStyles 方法。
检查视觉样式支持
Application 类的 RenderWithVisualStyles 属性指示当前应用程序是否正在使用视觉样式绘制控件。 在绘制自定义控件时,您可以检查 RenderWithVisualStyles 的值以确定您是否应该使用视觉样式呈现控件。 下表列出了要使 RenderWithVisualStyles 返回 true 所必须满足的四个条件。
Condition |
注释 |
---|---|
操作系统支持视觉样式。 |
若要单独验证此条件,请使用 VisualStyleInformation 类的 IsSupportedByOS 属性。 |
用户已在操作系统中启用了视觉样式。 |
若要单独验证此条件,请使用 VisualStyleInformation 类的 IsEnabledByUser 属性。 |
在应用程序中已启用视觉样式。 |
通过调用 Application.EnableVisualStyles 方法,或使用指定用 ComCtl32.dll 版本 6 或更高版本绘制控件的应用程序清单,可在应用程序中启用视觉样式。 |
视觉样式正被用于绘制应用程序窗口的工作区。 |
若要单独验证此条件,请使用 Application 类的 VisualStyleState 属性,并验证该属性的值是否为 VisualStyleState.ClientAreaEnabled 或 VisualStyleState.ClientAndNonClientAreasEnabled。 |
若要确定用户何时启用或禁用视觉样式,或何时从一种视觉样式切换到另一种样式,请在 SystemEvents.UserPreferenceChanging 或 SystemEvents.UserPreferenceChanged 事件的处理程序中检查 UserPreferenceCategory.VisualStyle 值。
重要事项 |
---|
如果您想在用户启用或切换视觉样式时使用 VisualStyleRenderer 来呈现控件或用户界面元素,请确保是在处理 UserPreferenceChanged 事件时执行此操作,而不是在处理 UserPreferenceChanging 事件时。 如果在处理 UserPreferenceChanging 时使用 VisualStyleRenderer 类,将会引发异常。 |