WPF的MessageBox為什么會這樣
我的一個同學跟我說:“WPF不是新一代技術嗎?怎么連MessageBox都沒WinForm 的好看?”

上圖是Windows Forms 的MesssageBox 與WPF 的MessageBox 的對比,我們發現,WPF沒有啟用視覺樣式。
有的朋友會問了,那既然WPF沒有啟用視覺樣式,那為什么它的控件的外觀和啟用樣式后一樣呢?
原因是這樣的,WPF控件的繪制方式和普通程序不一樣,它是采用DirectX 進行繪制的,而MessageBox 是在調用Windows API,所以MessageBox 沒有采用DirectX 進行繪制,因此我們沒能在MessageBox 上看到這種視覺樣式。
啟用WPF應用程序的視覺樣式
我們都知道,Windows Forms應用程序在Main方法中會調用一個方法去啟用視覺樣式:
Application.EnableVisualStyles();
對於WPF我們可以用應用程序清單文件來解決這個問題。

首先,給項目添加一個應用程序清單文件。
在清單文件的最后,微軟已經為我們寫好了啟用視覺樣式的代碼,我們只要把它解注釋就行。
<!-- 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一下,再運行,效果如下

怎么還是不行?樓主你騙人!!!
別急,聽我慢慢道來。
我們打開應用程序生成的目錄,

在這有兩個exe,我們運行這個生成的WPFVisualStyle.WPF.exe,效果如下,怎么樣,我沒騙你吧?

為什么會這樣
好了,問題解決了,扯點別的東西。下面那個WPFVisualStyle.WPF.vshost.exe,看名字就知道是在Visual Studio 調試程序時的宿主進程,它是沒有嵌入清單的。
有的朋友可能會問,那我想在調試時看到視覺效果怎么辦?
其實這個就在項目屬性的Debug選項卡下面,找到Enable Visual Studio hosting process,把前面的勾去掉,Visual Studio在調試時就會去調用WPFVisualStyle.WPF.exe,我們也就能看到視覺效果了。
關於應用程序清單文件
說了這么多,有的朋友可能對應用程序清單文件產生興趣了,關於它的用法,這里給一篇MSDN的文檔供大家參考。
Manifest Files Reference (Windows)
本文來自Hamson博客,原文地址:http://www.cnblogs.com/hamson/archive/2013/02/18/enable-wpf-messagebox-visualstyle.html