偶然的想法,遇到了Winform更改Winform皮膚的問題。
WPF沒有這個問題,WPF的控件都是沒有外形的,完全可以根據自己需要自由發揮,可以通過直觀的編碼實現各種絢麗的界面效果,網上也有很多現有的style、template供參考。
相比WPF,Winform換膚就沒有那么幸運了。實現起來相對比較麻煩。
Baidu+Google,發現解決Winform換膚的實現方法,基本有如下兩種。
實現1.使用現有皮膚。優點:實現及其簡單,基本不需要編碼;但細節需要注意。缺點:不能自己定制
實現2.完全的GDI+繪制。有點:可以完全根據個人愛好制作個性化的界面。缺點:完成一個用戶體驗良好的皮膚,編碼量和前期圖片素材准備需要花費精力。
本文首先介紹實現1:使用現有皮膚的方法,后面的博文會介紹實現2.
實現1,原理是很簡單的,你像是換主題一樣,只需要第三方法的類庫就可以實現
SkinCrafter http://skincrafter.com/
irisskin http://www.sunisoft.cn/irisskin/index.htm
DotNetSkin http://www.dotnetskin.net/
還有更高級的 Infragistics NetAdvantage
所有這些第三方類庫,DebugLZQ沒有都去驗證。只是試了下IrisSkin2.dll(下載),和SSK皮膚文件(下載),這個皮膚里面有一個展示Demo,可以查看各種皮膚對應的效果。
博客園里有幾篇類似的文章,但是LZ試了一下。主要的問題是:很多文章相互參考(你懂的.......),很多根本都沒有去試過,結果按着他的步驟去嘗試,運行不了,存在相同的問題。無良的人啊,誤人子弟!
下面step by step來實現這個Demo。
1.新建一個Winform項目,把上面的dll文件和SSK皮膚文件放入項目的bin/debug目錄下。並添加這個dll文件的引用。
2.在窗體cs文件中添加如下傻瓜般的代碼,如下:
namespace TaskVision_V_1_WinForm { /// <summary> /// Winform 皮膚 Demo /// By DebugLZQ /// http://www.cnblogs.com/DebugLZQ /// </summary> public partial class Form1 : Form { Sunisoft.IrisSkin.SkinEngine se = null; public Form1() { InitializeComponent(); se = new Sunisoft.IrisSkin.SkinEngine(); se.SkinAllForm = true;//所有窗體均應用此皮膚 se.SkinFile = "skin/WaveColor1.ssk"; } private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.Show(); } } }
運行如下:
中間的黑框框是LZ拖上去的DataGridView控件。
需要注意的地方是:該第三方控件要求.NET Framework 版本最高為3.5。使用VS2010或是VS2012的博友需要更改項目的目標版本。
下一篇博文將介紹自定義皮膚的方法,請期待。。。