使用视觉样式呈现控件
.NET Framework 支持在支持控件的操作系统中使用视觉样式呈现控件和其他 Windows 用户界面 (UI) 元素。 本主题讨论 .NET Framework 提供的不同级别支持,用于以操作系统当前的视觉样式呈现控件和其他 UI 元素。
常见控件的渲染类
呈现控件是指绘制控件的用户界面。 System.Windows.Forms 命名空间提供用于呈现一些常见 Windows 窗体控件的 ControlPaint 类。 但是,此类在经典 Windows 样式中绘制控件,这使得在启用了视觉样式的应用程序中绘制自定义控件时难以保持一致的 UI 体验。
.NET Framework 2.0 包括 System.Windows.Forms 命名空间中的类,这些类使用视觉样式呈现公共控件的部件和状态。 其中每个类都包括 static
方法,用于使用操作系统当前的视觉样式绘制控件或控件在特定状态下的部件。
其中一些类旨在绘制相关控件,而不考虑视觉样式是否可用。 如果启用了视觉样式,则类成员将使用视觉样式绘制相关控件;如果禁用视觉样式,则类成员将在经典 Windows 样式中绘制控件。 这些类包括:
其他类只能在视觉样式可用时绘制相关控件,如果禁用视觉样式,其成员将引发异常。 这些类包括:
有关使用这些类绘制控件的详细信息,请参阅 如何:使用控件呈现类。
视觉样式元素和渲染类
System.Windows.Forms.VisualStyles 命名空间包括可用于绘制和获取视觉样式支持的任何控件或 UI 元素的信息的类。 支持的控件包括具有 System.Windows.Forms 命名空间中的呈现类的常见控件(请参阅上一部分),以及其他控件,如选项卡控件和 rebar 控件。 其他受支持的 UI 元素包括 开始 菜单、任务栏和窗口的非客户区。
System.Windows.Forms.VisualStyles 命名空间的主要类是 VisualStyleElement 和 VisualStyleRenderer。 VisualStyleElement 是用于标识视觉样式支持的任何控件或用户界面元素的基础类。 除了 VisualStyleElement 本身以外,System.Windows.Forms.VisualStyles 命名空间还包括许多具有 static
属性的嵌套类 VisualStyleElement,这些属性为控件、控件部件或其他由视觉样式支持的 UI 元素的每个状态返回一个 VisualStyleElement。
VisualStyleRenderer 提供了用于绘制和获取由操作系统当前视觉样式定义的每个 VisualStyleElement 信息的方法。 有关元素的检索信息包括其默认大小、背景类型和颜色定义。 VisualStyleRenderer 包装了来自 Windows 平台 SDK 的 Windows Shell 部分的视觉样式(UxTheme)API 的功能。 有关详细信息,请参阅 启用视觉样式。
有关使用 VisualStyleRenderer 和 VisualStyleElement的详细信息,请参阅 如何:呈现视觉样式元素。
启用视觉样式
若要为为 .NET Framework 版本 1.0 编写的应用程序启用视觉样式,程序员必须包含一个应用程序清单,该清单指定将使用 ComCtl32.dll 版本 6 或更高版本来绘制控件。 使用 .NET Framework 版本 1.1 或更高版本构建的应用程序可以使用 Application 类的 Application.EnableVisualStyles 方法。
检查视觉样式支持
Application 类的 RenderWithVisualStyles 属性指示当前应用程序是否使用视觉样式绘制控件。 绘制自定义控件时,可以检查 RenderWithVisualStyles 的值,以确定是应使用还是不使用视觉样式呈现控件。 下表列出了 RenderWithVisualStyles 返回 true
必须存在的四个条件。
条件 | 笔记 |
---|---|
操作系统支持视觉样式。 | 若要单独验证此条件,请使用 VisualStyleInformation 类的 IsSupportedByOS 属性。 |
用户已在操作系统中启用了视觉样式。 | 若要单独验证此条件,请使用 VisualStyleInformation 类的 IsEnabledByUser 属性。 |
应用程序中启用了视觉样式。 | 可以通过调用 Application.EnableVisualStyles 方法或使用指定 ComCtl32.dll 版本 6 或更高版本的应用程序清单来在应用程序中启用视觉样式来绘制控件。 |
视觉样式用于绘制应用程序窗口的客户区。 | 若要单独验证此条件,请使用 Application 类的 VisualStyleState 属性,并验证它是否具有值 VisualStyleState.ClientAreaEnabled 或 VisualStyleState.ClientAndNonClientAreasEnabled。 |
若要确定用户何时启用或禁用视觉样式,或从一个视觉样式切换到另一个视觉样式,请检查处理程序中是否有 SystemEvents.UserPreferenceChanging 或 SystemEvents.UserPreferenceChanged 事件的 UserPreferenceCategory.VisualStyle 值。
重要
如果要在用户启用或切换视觉样式时使用 VisualStyleRenderer 来呈现控件或 UI 元素,请确保在处理 UserPreferenceChanged 事件而不是 UserPreferenceChanging 事件时执行此操作。 如果在处理 UserPreferenceChanging时使用 VisualStyleRenderer 类,将引发异常。