WPF的MessageBox为什么会这样
我的一个同学跟我说:“WPF不是新一代技术吗?怎么连MessageBox都没WinForm 的好看?”
wpf
上图是Windows Forms 的MesssageBox 与WPF 的MessageBox 的对比,我们发现,WPF没有启用视觉样式。

有的朋友会问了,那既然WPF没有启用视觉样式,那为什么它的控件的外观和启用样式后一样呢?

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

启用WPF应用程序的视觉样式

我们都知道,Windows Forms应用程序在Main方法中会调用一个方法去启用视觉样式:

Application.EnableVisualStyles();

对于WPF我们可以用应用程序清单文件来解决这个问题。

image

首先,给项目添加一个应用程序清单文件。

在清单文件的最后,微软已经为我们写好了启用视觉样式的代码,我们只要把它解注释就行。

1
2
3
4
5
6
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<dependency>
    <dependentAssembly>
        <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df"          language="*" />
    </dependentAssembly>
</dependency>

把项目Rebuild一下,再运行,效果如下
image

来源