給WPF的MessageBox啟用視覺樣式


    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

 

  首先,給項目添加一個應用程序清單文件。

  在清單文件的最后,微軟已經為我們寫好了啟用視覺樣式的代碼,我們只要把它解注釋就行。

<!-- 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

 

  怎么還是不行?樓主你騙人!!!

  別急,聽我慢慢道來。

  我們打開應用程序生成的目錄,

  

image

 

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

  

image

 

  為什么會這樣

  好了,問題解決了,扯點別的東西。下面那個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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM