DevExpress WinForms使用教程:皮膚顏色和LookAndFeel
v18.2版本中更改了控制背景顏色和皮膚一起處理的方式。在v18.1中引入了頁(yè)面,其中包含一個(gè)skin selector。這個(gè)機(jī)制取代了的大多數(shù)用例。 對(duì)于許多應(yīng)用來(lái)說(shuō),在全球范圍內(nèi)應(yīng)用皮膚是一種可行的方法 - 它易于操作并且可以實(shí)現(xiàn)整體一致性。
但是大多數(shù)單獨(dú)的DevExpress WinForms控件有屬于自己的LookAndFeel屬性,這個(gè)屬性已存在多年,這些屬性啟用外觀和單個(gè)樣式的每個(gè)控件配置。但這種機(jī)制可能會(huì)讓新用戶困惑,而且每個(gè)控件非常有用的用例很少。
用于突出UI元素的顏色
為什么要破壞設(shè)計(jì)一致性并覆蓋單個(gè)控件的全局皮膚設(shè)置?據(jù)調(diào)查表明只有一個(gè)重要的場(chǎng)景:使用特殊顏色突出顯示特定的UI元素。如果您出于本用例未涵蓋的原因自定義控件LookAndFeel設(shè)置,可隨時(shí)通過(guò)電子郵件聯(lián)系開(kāi)發(fā)團(tuán)隊(duì):winformsteam@devexpress.com。
在以前的版本中,沒(méi)有直接的方法將高亮顏色應(yīng)用于UI元素。自定義背景顏色僅在為控件關(guān)閉皮膚時(shí)使用,并且需要大量條件代碼來(lái)調(diào)顏色和運(yùn)行時(shí)的外觀配置。
v18.2中隨處自定義顏色
這是一個(gè)比較重大的更新:從v18.2開(kāi)始,您現(xiàn)在可以應(yīng)用自定義前景色和背景色,而無(wú)需停用外觀。 為了清楚起見(jiàn),這意味著即使LookAndFeel.Style = DevExpress.LookAndFeel.LookAndFeelStyle.Skin – 這些設(shè)置組合被忽略。
Skin-coordinated高亮顏色
您現(xiàn)在可以為控件前景色和背景色選擇特殊值,每個(gè)皮膚對(duì)其進(jìn)行不同的解釋。

有五種特殊顏色值:Primary, Info, Warning, Danger和Success,根據(jù)當(dāng)前皮膚(和矢量皮膚的調(diào)色板),這些顏色使用不同的色調(diào)以保持與皮膚一致。通過(guò)將控件的顏色配置為這些特殊值,您可以輕松實(shí)現(xiàn)與當(dāng)前膚色完美結(jié)合的控件突出顯示外觀。

例如,要實(shí)現(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ā)布時(shí)提供對(duì)Pivot Grid列標(biāo)題的支持。
皮膚特殊值可用于前景色而沒(méi)有限制。 但是建議不要同時(shí)將背景和前景色設(shè)置為膚色特殊值! 將此類值指定給背景顏色屬性時(shí),它們會(huì)自動(dòng)更改相關(guān)的前景色調(diào)以提高可讀性。

每個(gè)控件的LookAndFeel已棄用
LookAndFeel隨著v18.2中的更改,不再需要單個(gè)控件上的LookAndFeel屬性。 它們現(xiàn)在仍然可用,但在編輯對(duì)話框中顯示一條警告消息:

對(duì)于將來(lái)的版本,我們打算從design-time中隱藏屬性。
上面詳述的更改存在一個(gè)潛在問(wèn)題:您可能在過(guò)去配置了Appearance.BackColor屬性,而LookAndFeel.Style設(shè)置為Skin。 這樣的設(shè)置可以是用于look&feel配置的快速“tests”的剩余部分,或者是由于外觀取代的先前UI樣式。在這種情況下,將項(xiàng)目升級(jí)到v18.2后,您可能會(huì)看到意外的控件背景顏色。
為了幫助您在項(xiàng)目中發(fā)現(xiàn)任何此類問(wèn)題,我們擴(kuò)展了本頁(yè)描述的有關(guān)DirectX的診斷API。 對(duì)于許多情況,設(shè)置PaintApiDiagnosticsLevel.Throw模式會(huì)很有幫助,如下所示:
DevExpress.XtraEditors.WindowsFormsSettings.ForcePaintApiDiagnostics( DevExpress.Utils.Diagnostics.PaintApiDiagnosticsLevel.Throw);
因此,當(dāng)控件呈現(xiàn)的背景顏色不是skinned顏色(即不是DevExpress.LookAndFeel.DXSkinColors.FillColors值)時(shí),您將看到拋出異常。這是推薦的方法,因?yàn)樗梢钥焖僖龑?dǎo)您使用自定義顏色的代碼位置。
或者如果您不喜歡處理許多單獨(dú)的異常,您可以利用跟蹤模式生成日志輸出到文件或控制臺(tái):
WindowsFormsSettings.ForcePaintApiDiagnostics(PaintApiDiagnosticsLevel.Trace, (apiLevel, api) => { Console.WriteLine(apiLevel.ToString() + ": " + api); });
lambda表達(dá)式的api參數(shù)將包含一個(gè)類似AppearanceHeader.BackColor的字符串。 有了這些,您可以在代碼中搜索每個(gè)相關(guān)屬性的出現(xiàn)次數(shù)并評(píng)估其設(shè)置方式。
掃描關(guān)注DevExpress中文網(wǎng)微信公眾號(hào),及時(shí)獲取最新動(dòng)態(tài)及最新資訊
