65.9K
CodeProject 正在变化。 阅读更多。
Home

C# Windows Aero 风格向导控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.42/5 (10投票s)

2010年6月14日

GPL3

4分钟阅读

viewsIcon

80707

downloadIcon

4812

自从 Windows Vista 引入 Aero 风格以来,我一直是 Windows Aero 风格窗口的粉丝。然而,.NET Framework 中很少或根本没有 Aero 的集成,所以我着手创建我自己的 Windows Aero 主题化窗体。

引言

自从 Windows Vista 引入 Aero 风格以来,我一直是 Windows Aero 风格窗口的粉丝。然而,.NET Framework 中很少或根本没有 Aero 的集成,所以我着手创建我自己的 Windows Aero 主题化窗体。该项目借鉴了他人(以及我自己的大量辛勤工作)在 CodePlex 上的 Windows Forms Aero 的成果。

以下是 Windows Vista 中常见的 Windows Aero 向导示例

NewPrinterWizard-Small.gif

据我所知,.NET Framework 中没有内置的方便创建 Windows Aero 风格窗体的资源,因此该项目的目标是提供一个(或一些)类,用户可以轻松使用它们来创建主题化窗体。

值得关注的视觉方面包括

  • 透明度(窗口顶部)
  • 导航按钮(后退按钮)
  • 图标
  • 发光文本(标题)

此控件提供了对这些功能(及更多)的便捷访问,以简化设置过程。此控件(尚)不具备的功能是轻松切换页面。您需要使用类似 *面板* 的东西来实现这一点。(已包含一些事件来帮助您实现此目的)。

幕后

为了实现这一切,我们需要利用 Windows Vista 及更高版本内置的桌面窗口管理器 API(dwmapi.dll)和视觉样式(UxTheme.dll)。这里有几个我们需要调用的方法,以将“玻璃”主题扩展到我们的窗口。

DwmExtendFrameIntoClientArea 根据给定的 MARGIN 将玻璃效果扩展到窗体。

var Margins = new MARGINS { Top = 41, Left = 0, Right = 0, Bottom = 0 };
DwmExtendFrameIntoClientArea(Handle, ref Margins);

要增加玻璃区域的高度,只需随意调整边距属性即可。

此外,我们还有 SetWindowThemeAttribute 外部方法(UxTheme.dll),它也于 Windows Vista 中引入,用于定义窗口的视觉样式。

其余部分只是为了补偿在不同操作系统上的不同场景(当桌面窗口组合被禁用时,以及当程序在低于 Windows Vista 的操作系统上运行时,都会进行一些工作)。

设置您的项目

Windows Aero 风格向导控件(实际上名为“JPWizardForm”)包含在我开发的 JPC Framework 中。然而,在撰写本文时,JPC Framework 尚未准备好完整下载,因此我提供了一个专用项目,该项目已在本页顶部链接。

  • 下载并打开附加的项目。
  • MainForm.cs 文件的源代码视图中。
  • 将类更改为继承 JPWizardForm 而不是标准的 Form 类。
namespace WindowsAeroWizardControl
{
     public partial class MainForm : JPWizardForm
     {
          public MainForm()
          {
               InitializeComponent();
          }
     } 

生成项目并切换回设计视图。

使用控件

该向导公开了一些属性和事件,我们可以用来创建我们的向导。

EnablePreviousButton : Boolean

启用或禁用窗体左上角的导航按钮。此按钮是后退按钮,会根据用户交互自动更改。

IsAeroEnabled : Boolean

获取一个值,该值指示 PC 上当前是否启用了 Windows Aero 风格主题。注意,此值在 Visual Studio(设计时)内部使用时始终为 *false*。您需要生成并运行程序才能使值发生变化。

WizardIcon : Image

获取或设置用于窗体左上角的图标。

DesktopCompositionChanged : Event

当桌面窗口管理器 (DWM) 通知控件 Windows 主题已更改时,将引发此事件。很可能是因为主题被打开或关闭。在引发此事件时,您应该检查 IsAeroEnabled 属性。

Next : Event

点击“下一步”按钮时引发。

Previous : Event

点击“上一步”按钮(导航按钮)时引发。

CloseRequest : Event

用户点击“取消”按钮时引发。

进一步开发

我打算随着时间的推移更新该项目,以包含一个您可以用来自动在步骤之间导航的自定义控件。文章 Windows Aero 风格向导控件 最初发布在我的网站上。

历史

  • 10/06/15 - 更新为使用 NAV_BACKBUTTONSTATES,由 tonyt 贡献
  • 10/06/14 – 首次发布
© . All rights reserved.