Windows XP發布時,我們中許多人都為她華麗漂亮的界面折服和興奮。然而,.NET1.0發布時,我們中又有許多人,包括我自己,對它不支持XP風格感到大失所望??墒聦嵤?,在Windows XP(只限于WindowsXP)里.NET支持XP風格,只是還要您做一點小工作。
這篇文章主要參考了http://www.codeproject.com/csharp/dotnetvisualstyles.asp
跟隨下面的步驟,使您的程序擁有XP風格的界面,GO!
1. 新建一個Windows應用程序,然后打開AssemblyInfo.cs,修改一下內容,下面的是示例代碼:
using System.Reflection;
using System.Runtime.CompilerServices;
[assembly: AssemblyTitle("abc")]
[assembly: AssemblyDescription("abc")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]
2. 往項目添加新項。新添加一個XML文件,將文件命名為 [您的程序名].exe.manifest,[您的程序名]指的是在 ..\bin\debug 文件夾里生成的可執行程序名 。文件的內容示例如下:您只要根據您在AssemblyInfo.cs里所作的設置修改 version="1.0.0.0", name="abc", <description>abc</description> 這幾個值就可以了。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly
xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="abc"
type="win32" />
<description>abc</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144clearcase/" target="_blank" >ccf1df"
language="*" />
</dependentAssembly>
</dependency>
</assembly>
重新編譯程序。 注意,從ButtonBase,GroupBox和Label繼承下來的組件必須將FlatStyle屬性設為System。
3. 將 [您的程序名].exe.manifest 文件添加到程序的可執行文件
(1)菜單-->文件-->打開,打開..\bin\debug\[您的程序名].exe,現在您可以看到一個資源瀏覽樹;
(2)右擊根目錄[您的程序名],單擊"添加資源...";
(3)在跳出的對話框中單擊“自定義...”;
(4)將資源類型命名為RT_MANIFEST,確定;
(5)雙擊資源樹的RT_MANIFEST下的項(一般情況下是101),Copy 文件 [您的程序名].exe.manifest 的內容,粘貼在打開的文件中,粘貼的結果是二進制形式(結果有點奇怪,不用理會);
(6)保存,然后將101項的ID改為1,再保存。注意,不要重新對程序進行編譯。
現在,重新打開您的程序,怎么樣,界面應該不錯吧。
原理:
問題的關鍵在于comctl32.dll。您搜索一下您的計算機,將發現有兩個comctl32.dll。組件的外觀就與這兩個DLL中的特定資源相聯系,它們提供特定的資源用于組件客戶區域的繪制。對于繼承于ButtonBase,GroupBox和Label的組件,將它們的FlatStyle屬性設為System的目的也是為了讓系統對組件進行繪制。
默認情況下,系統將使用..\Windows\System32目錄下的DLL,您需要做的工作就是告訴系統使用另一個DLL,這就是將 [您的程序名].exe.manifest 文件 添加到可執行文件的目的。
下面是支持XP風格的組件完整列表:
Label,TextBox, RichTextBox, HScrollBox, VScrollBox, ProgressBar, TabControl, MainMenu, ComboBox, ContextMenu, DataGrid, ListBox, ListView, TreeView, DataTimePicker, MonthCalendar, Splitter,TrackBar, StatusBar, ToolBar
原文轉自:http://www.anti-gravitydesign.com