使用视觉样式呈现控件

.NET Framework 使用操作系统中受支持的视觉样式为呈现控件和其他 Windows 用户界面 (UI) 元素提供支持。 本主题讨论 .NET Framework 中对使用操作系统当前视觉样式呈现控件和其他 UI 元素提供的多种级别的支持。

公共控件的呈现类

呈现控件是指绘制控件的用户界面。 System.Windows.Forms 命名空间提供了用来呈现某些公共 Windows 窗体控件的 ControlPaint 类。 但是,此类以经典 Windows 样式绘制的控件,当在启用了视觉样式的应用程序中绘制自定义控件时,难以维护 UI 体验的一致性。

.NET Framework 2.0 包括 System.Windows.Forms 命名空间中使用视觉样式呈现部件和常见控件状态的类。 每个这样的类都包括使用操作系统当前视觉样式绘制控件和特定状态控件部件的 static 方法。

其中一些类旨在绘制相关控件,而不考虑视觉样式是否可用。 如果启用了视觉样式,类成员将使用视觉样式绘制相关控件;如果禁用了视觉样式,类成员将以经典 Windows 样式绘制控件。 这些类包括:

视觉样式可用时,其他类才能绘制相关控件,如果禁用了视觉样式,则类成员会引发异常。 这些类包括:

有关使用这些类绘制控件的详细信息,请参阅 How to: Use a Control Rendering Class

视觉样式元素和呈现类

System.Windows.Forms.VisualStyles 命名空间包含用于绘制和获取视觉样式支持的任何控件或 UI 元素信息的类。 支持的控件包括在 System.Windows.Forms 命名空间中具有呈现类的公共控件(请参阅上一节)以及诸如选项卡控件和 rebar 控件的其他控件。 其他受支持的 UI 元素包括“开始” 菜单、任务栏和 Windows 非工作区的各部分。

System.Windows.Forms.VisualStyles 命名空间的主要类为 VisualStyleElementVisualStyleRendererVisualStyleElement 是一个基础类,用于标识视觉样式支持的任何控件或用户界面元素。 除了 VisualStyleElement 本身, System.Windows.Forms.VisualStyles 命名空间包含许多 VisualStyleElement 嵌套类,这些类具有为视觉样式支持的控件、控件部件或其他 UI 元素的状态返回 staticVisualStyleElement 属性。

VisualStyleRenderer 提供一些方法,这些方法可以绘制和获取由操作系统当前视觉样式定义的每个 VisualStyleElement 的信息。 可以检索的元素信息包括其默认大小、背景类型和颜色定义。 VisualStyleRenderer 包装来自 Windows Platform SDK 的 Windows Shell 部分的视觉样式 (UxTheme) API 的功能。 有关详细信息,请参阅启用视觉样式

有关使用 VisualStyleRendererVisualStyleElement的详细信息,请参阅 How to: Render a Visual Style Element

启用视觉样式

若要为针对 NET Framework 版本 1.0 编写的应用程序启用视觉样式,程序员必须将应用清单包含进来。该清单指定使用 ComCtl32.dll 版本 6 或更高版本绘制控件。 使用 .NET Framework 版本 1.1 或更高版本生成的应用程序可以使用 Application 类的 Application.EnableVisualStyles 方法。

检查视觉样式支持

RenderWithVisualStyles 类的 Application 属性指示当前应用程序是否正在使用视觉样式绘制控件。 绘制自定义控件时,可以检查 RenderWithVisualStyles 的值来确定是否应使用视觉样式呈现控件。 下表列出了 RenderWithVisualStyles 返回 true必须存在的四个条件。

条件 说明
操作系统支持视觉样式。 若要单独验证这种情况,请使用 IsSupportedByOS 类的 VisualStyleInformation 属性。
用户已在操作系统中启用视觉样式。 若要单独验证这种情况,请使用 IsEnabledByUser 类的 VisualStyleInformation 属性。
应用程序中已启用视觉样式。 可以通过调用 Application.EnableVisualStyles 方法或使用指定用 ComCtl32.dll 版本 6 或更高版本绘制控件的应用程序清单来启用应用程序中的视觉样式。
正在使用视觉样式来绘制应用程序窗口的工作区。 若要单独验证这种情况,请使用 VisualStyleState 类的 Application 属性,验证它是否具有 VisualStyleState.ClientAreaEnabledVisualStyleState.ClientAndNonClientAreasEnabled值。

若要确定用户何时启用或禁用视觉样式,或何时从一种视觉样式切换到另种,请检查 UserPreferenceCategory.VisualStyleSystemEvents.UserPreferenceChanging 事件处理程序中的 SystemEvents.UserPreferenceChanged 值。

重要

如果想要在用户启用或切换视觉样式时使用 VisualStyleRenderer 来呈现控件或 UI 元素,请确保在处理 UserPreferenceChanged 事件而非 UserPreferenceChanging 事件时这样做。 处理 VisualStyleRenderer 时如果使用 UserPreferenceChanging类,则会引发异常。

另请参阅