DevExpress WinForms使用教程:皮膚顏色和LookAndFeel
v18.2版本中更改了控制背景顏色和皮膚一起處理的方式。在v18.1中引入了Project Settings頁面,其中包含一個skin selector。這個機制取代了DefaultLookAndFeel組件的大多數(shù)用例。 對于許多應(yīng)用來說,在全球范圍內(nèi)應(yīng)用皮膚是一種可行的方法 - 它易于操作并且可以實現(xiàn)整體一致性。
但是大多數(shù)單獨的DevExpress WinForms控件有屬于自己的LookAndFeel屬性,這個屬性已存在多年,這些屬性啟用外觀和單個樣式的每個控件配置。但這種機制可能會讓新用戶困惑,而且每個控件非常有用的用例很少。
用于突出UI元素的顏色
為什么要破壞設(shè)計一致性并覆蓋單個控件的全局皮膚設(shè)置?據(jù)調(diào)查表明只有一個重要的場景:使用特殊顏色突出顯示特定的UI元素。如果您出于本用例未涵蓋的原因自定義控件LookAndFeel設(shè)置,可隨時通過電子郵件聯(lián)系開發(fā)團(tuán)隊:winformsteam@devexpress.com。
在以前的版本中,沒有直接的方法將高亮顏色應(yīng)用于UI元素。自定義背景顏色僅在為控件關(guān)閉皮膚時使用,并且需要大量條件代碼來調(diào)顏色和運行時的外觀配置。
v18.2中隨處自定義顏色
這是一個比較重大的更新:從v18.2開始,您現(xiàn)在可以應(yīng)用自定義前景色和背景色,而無需停用外觀。 為了清楚起見,這意味著即使LookAndFeel.Style = DevExpress.LookAndFeel.LookAndFeelStyle.Skin – 這些設(shè)置組合被忽略。
Skin-coordinated高亮顏色
您現(xiàn)在可以為控件前景色和背景色選擇特殊值,每個皮膚對其進(jìn)行不同的解釋。
有五種特殊顏色值:Primary, Info, Warning, Danger和Success,根據(jù)當(dāng)前皮膚(和矢量皮膚的調(diào)色板),這些顏色使用不同的色調(diào)以保持與皮膚一致。通過將控件的顏色配置為這些特殊值,您可以輕松實現(xiàn)與當(dāng)前膚色完美結(jié)合的控件突出顯示外觀。
例如,要實現(xiàn)此自定義編輯表單的外觀,您可以選擇Update按鈕背景的皮膚信息和Cancel按鈕的Danger。以下是不同Bezier調(diào)色板中這些設(shè)置的按鈕外觀圖示。
當(dāng)然,也可以從代碼中分配皮膚:
colId.AppearanceHeader.BackColor = DevExpress.LookAndFeel.DXSkinColors.FillColors.Question;
您當(dāng)前可以將皮膚特殊值指定為這些UI元素的背景:
- Grid Control:Column和Band headers、LayoutView和CardView 卡片標(biāo)題
- Simple Button
- Tabs
- Group Control
- Dock Panels
- Layout Control groups
- Tree List:Column和Band標(biāo)題
將在發(fā)布時提供對Pivot Grid列標(biāo)題的支持。
皮膚特殊值可用于前景色而沒有限制。 但是建議不要同時將背景和前景色設(shè)置為膚色特殊值! 將此類值指定給背景顏色屬性時,它們會自動更改相關(guān)的前景色調(diào)以提高可讀性。
每個控件的LookAndFeel已棄用
LookAndFeel隨著v18.2中的更改,不再需要單個控件上的LookAndFeel屬性。 它們現(xiàn)在仍然可用,但在編輯對話框中顯示一條警告消息:
對于將來的版本,我們打算從design-time中隱藏屬性。
上面詳述的更改存在一個潛在問題:您可能在過去配置了Appearance.BackColor屬性,而LookAndFeel.Style設(shè)置為Skin。 這樣的設(shè)置可以是用于look&feel配置的快速“tests”的剩余部分,或者是由于外觀取代的先前UI樣式。在這種情況下,將項目升級到v18.2后,您可能會看到意外的控件背景顏色。
為了幫助您在項目中發(fā)現(xiàn)任何此類問題,我們擴展了本頁描述的有關(guān)DirectX的診斷API。 對于許多情況,設(shè)置PaintApiDiagnosticsLevel.Throw模式會很有幫助,如下所示:
DevExpress.XtraEditors.WindowsFormsSettings.ForcePaintApiDiagnostics( DevExpress.Utils.Diagnostics.PaintApiDiagnosticsLevel.Throw);
因此,當(dāng)控件呈現(xiàn)的背景顏色不是skinned顏色(即不是DevExpress.LookAndFeel.DXSkinColors.FillColors值)時,您將看到拋出異常。這是推薦的方法,因為它可以快速引導(dǎo)您使用自定義顏色的代碼位置。
或者如果您不喜歡處理許多單獨的異常,您可以利用跟蹤模式生成日志輸出到文件或控制臺:
WindowsFormsSettings.ForcePaintApiDiagnostics(PaintApiDiagnosticsLevel.Trace, (apiLevel, api) => { Console.WriteLine(apiLevel.ToString() + ": " + api); });
lambda表達(dá)式的api參數(shù)將包含一個類似AppearanceHeader.BackColor的字符串。 有了這些,您可以在代碼中搜索每個相關(guān)屬性的出現(xiàn)次數(shù)并評估其設(shè)置方式。
DevExpress 2019全新出發(fā),多套購買享更低優(yōu)惠!
掃描關(guān)注DevExpress中文網(wǎng)微信公眾號,及時獲取最新動態(tài)及最新資訊