【问题标题】:Making Vista style apps in C#用 C# 制作 Vista 风格的应用程序
【发布时间】:2010-10-08 00:14:21
【问题描述】:

我正在运行 windows vista 并希望外观看起来像常规 vista 程序。有没有关于如何构建 Vista 风格应用程序的非常好的教程/文章?我还想学习如何使用本机代码并将其转换为 C#,例如 this 示例。

【问题讨论】:

  • “Vista 风格的应用程序”是什么意思?你是说外观吗?这就是它提供的操作系统和新控件来完成这项工作。
  • 是的,我指的是控件的外观。

标签: c# visual-studio windows-vista


【解决方案1】:

如果您使用的是 WinForms,它相对很容易完成,因为 WinForms 基于本机 Win32 控件。许多控件可以通过设置附加标志(通过向本机控件发送消息)或使用SetWindowTheme 来增强其呈现。这可以通过互操作来实现。

以一个简单的 ListView 为例。如果您想要一个资源管理器样式的列表视图,您可以在 ListView 的公开句柄上使用 SetWindowTheme。我们使用互操作来访问原生的 SetWindowTheme() 函数,挂钩 ListView 的窗口过程并在创建控件时应用主题:

static class NativeMethods
{
    public const int WM_CREATE = 0x1;

    [DllImport("uxtheme.dll", CharSet = CharSet.Unicode)]
    public extern static int SetWindowTheme(
        IntPtr hWnd, string pszSubAppName, string pszSubIdList);
}

class ListView : System.Windows.Forms.ListView
{
    protected override void WndProc(ref Message m)
    {
        if (m.Msg == NativeMethods.WM_CREATE) {
            NativeMethods.SetWindowTheme(this.Handle, "Explorer", null);
        }
        base.WndProc(ref m);
    }
}

默认 ListView 和我们的增强版本的区别: ListView difference http://img100.imageshack.us/img100/1027/62586064nt6.png

不幸的是,每个控件都没有一种简单的方法。有些控件甚至没有任何 WinForms 包装器。最近我偶然发现了一个不错的汇编in this CodeProject article,值得一看。也可能有托管库将其打包。

【讨论】:

  • FWIW,这个技巧也是 TreeView 控件的主题。 :) AFAIK,这是仅有的两个以此技巧为主题的控件。
【解决方案2】:

如果您使用 WPF,您可以使用 Microsoft 的 Vista Bridge library,它有几个有用的控件。否则,只需查看Windows UX Guidelines 并自行滚动。 从该页面:

其中包含的一些功能 Vista Bridge 示例库是 - Vista风格的任务和文件对话框, 常见的打开和保存对话框, 应用程序恢复和重启, 已知文件夹、网络列表、电源 管理,用户帐户控制, CommandLink 控件、Aero 向导 控制、系统提供的图标等。

此外,您可以查看 Aero.ControlsAero.Wizard,这是我编写的两个免费开源 WinForms 包,它们为您设置了一些标准控件和向导,分别。

【讨论】:

  • 这正是我想要的!谢谢! :-)
  • 请注意,Bridge Library 已针对 Windows 7 进行了更新,现在称为 Windows API 代码包:archive.msdn.microsoft.com/WindowsAPICodePack 它支持很多东西,但 imo 太大而且太单一,无法添加到小应用程序。
【解决方案3】:

如果您希望 Windows XP 的应用程序看起来 100% 像 Vista,那么这将非常复杂,因为您需要覆盖 Windows 的绘制方式,以便设计自己的兼容版本。

通常这些事情是在 Windows 主题级别完成的,有时通过包含改变所有应用程序外观的特殊处理程序来完成。
然后是 tools like FastAero 为所有 Windows XP 表单添加透明度 (source code available)。

无论如何,如果您希望您的应用看起来像 Vista,您需要尊重 Aero 的 Windows User Experience Interaction Guidelines

您也可以使用WPF to fake the Aero-style of controls,这样您的应用在任何版本的 Windows 上看起来都相似。

【讨论】:

    【解决方案4】:

    你可以看看第三方解决方案。

    我们使用 DevExpress 在 WinXP 上实现样式精美的 WinForm 应用程序,特别是他们的 WinForms ribbon controls

    【讨论】:

      猜你喜欢
      • 2010-11-05
      • 1970-01-01
      • 2010-10-09
      • 2011-05-26
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      相关资源
      最近更新 更多