问题

WPF的MessageBox看上去像XP系统的风格,有种老系统的味道。但WPF作为微软的新一代技术,为何在MessageBox上反而不如同根同源而更古早的Winform?

Winform的MessageBox

WPF的MessageBox


原因

WPF控件的绘制方式和普通程序比如Winform不一样,它是采用 DirectX 进行绘制的,而 MessageBox 是在调用Windows API,所以 MessageBox 没有采用 DirectX 进行绘制,因此我们没能在MessageBox 上看到这种视觉样式。


解决

仔细观察Winform程序的Main方法会发现,方法中会调用一个方法去启用视觉样式

Application.EnableVisualStyles();

而对于WPF程序而言,可以采用 应用程序清单文件 来解决此问题

在项目中添加一个应用程序清单文件

然后进入清单文件,找到如下代码:

  <!-- 启用 Windows 公共控件和对话框的主题(Windows XP 和更高版本) -->
  <!--
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
          type="win32"
          name="Microsoft.Windows.Common-Controls"
          version="6.0.0.0"
          processorArchitecture="*"
          publicKeyToken="6595b64144ccf1df"
          language="*"
        />
    </dependentAssembly>
  </dependency>
  -->

将注释解除后重新Bulid即可解决此问题


附记

如果重新Bulid后没有改变,在项目属性的Debug选项卡下面,找到Enable Visual Studio hosting process,把前面的勾去掉即可!

最后修改:2023 年 01 月 08 日
End

本文标题:为WPF的MessageBox启用视觉样式

除非另有说明,本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

声明:转载请注明文章来源,本人保留此文章的所有权利

如果觉得我的文章对你有用,请随意赞赏