原創|其它|編輯:郝浩|2011-04-19 15:45:06.000|閱讀 2209 次
概述:但是個人感覺這套控件雖然相當豪華,但是很難上手,資料少不說,其屬性設置什么的與通常的屬性差別太大,應用起來太難。相比dotNetBar要好很多,比如改造現有窗體只需要改變按鈕類型以及窗體父類就可以了,但是對于DevExpress這簡直是天方夜譚。研究整整兩天到現在才有關于窗體皮膚的那么一點頭緒,真郁悶。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
但是個人感覺這套控件雖然相當豪華,但是很難上手,資料少不說,其屬性設置什么的與通常的屬性差別太大,應用起來太難。相比dotNetBar要好很多,比如改造現有窗體只需要改變按鈕類型以及窗體父類就可以了,但是對于DevExpress這簡直是天方夜譚。研究整整兩天到現在才有關于窗體皮膚的那么一點頭緒,真郁悶。
在DevExpress中有些內建的風格了,要加載額外的風格,需要使用 DevExpress.Skins.SkinManager.Default.RegisterAssembly 這個方法,下面是示例代碼:
DevExpress.Skins.SkinManager.Default.RegisterAssembly (System.Reflection.Assembly.Load("DevExpress.BonusSkins.v7.3")); DevExpress.Skins.SkinManager.Default.RegisterAssembly (System.Reflection.Assembly.Load("Office2007Bonus")); //DevExpress.Skins.SkinManager.Default.RegisterAssembly (System.Reflection.Assembly.Load("DevExpress.XmasSkins")); DevExpress.Skins.SkinManager.Default.RegisterAssembly (System.Reflection.Assembly.Load("DevExpress.OfficeSkins.v7.3"));
上面那行注釋掉的是因為運行會出錯,個人估計是因為破解的緣故,呃。這樣加載的結果,大概是有17個風格出現。
DevExpress窗體風格應用以及MDI子窗體風格的應用 在風格加載過后,通過 DevExpress.Skins.SkinManager.Default.Skins 可以獲得所有皮膚的列表。
在應用控件后,窗體要應用DevExpress的風格,可以讓窗體不從 System.Windows.Forms.Form 繼承而從 DevExpress.XtraEditors.XtraForm 繼承,這樣窗體就可以使用DevExpress 的風格顏色配置了。但是這樣使用后還會有問題,就是窗體的邊框不會被DevExpress的風格應用上。
要解決這個問題,可以使用 DevExpress.Skins.SkinManager.EnableFormSkins() 這個方法,在應用后,窗體邊框也會被應用上風格。這個方法建議在創建窗體前就調用,比如在 Program.cs 的Main方法中,在 Application.Run 調用前就使用,這樣能避免很多問題。
到此基本上達到目的了,但是呢,人類的欲望是無窮的啊。現在就會發現有點不爽的地方了,是什么呢?就是當一個窗體是MDI窗體(MDIParent不為空)的時候,這個窗體是無論如何也無法被應用的。郁悶不?那當然郁悶,何止是郁悶,那不是一般的郁悶啊。可憐DevExpress的開發文檔少得就如同我兜里的鈔票一樣,在它的Demo之內也沒有找到示例。
不過終于找到方法了,還是從開發文檔中找到的,那就是 evExpress.Skins.SkinManager.EnableMdiFormSkins() 這個方法。望文生義,看這個方法的名字就知道這個函數是干嘛了吧??
但是很讓我感覺不對勁的是,為什么在VS里面找不到這個方法。在SDK中對這個方法的解釋是,“This member supports the internal infrastructure and is not intended to be used directly from your code”。我英語不太好,但是我看懂了它是在說不建議直接從代碼中調用,也不知道是為什么。祭出偉大的 Reflector 反編譯一下 DevExpress.Utils.v7.3.dll ,看到這樣的代碼:
1[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] 2public static void EnableMdiFormSkins() 3{ 4 allowMdiFormSkins = true; 5}
琢磨著可能有其它的方法能間接調用,但是折騰這么久死了N+腦細胞也沒能找到是因為什么啊,憂郁
算了,最后就直接調用了,編譯正常,運行也正常。想不通,但就這么著吧。最后Program.cs中的代碼如下:
[STAThread] static void Main() { Application.EnableVisualStyles(); DevExpress.UserSkins.OfficeSkins.Register(); DevExpress.Skins.SkinManager.EnableFormSkins(); DevExpress.Skins.SkinManager.EnableMdiFormSkins(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm());
(慧都控件網版權所有,轉載請注明出處,否則追究法律責任)
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載