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