調(diào)色板
調(diào)色板允許將顏色(例如,公司顏色)集成到應(yīng)用程序中,并自定義主題中使用的顏色,您可以在此實例中創(chuàng)建自定義調(diào)色板或使用預(yù)定義的調(diào)色板。
Palette是一個命名顏色列表,每種顏色都有一個ColorName值和一個color值,您可以使用ColorName為任意數(shù)量的UI元素分配顏色:
提示:您可以使用WPF主題設(shè)計器編輯調(diào)色板顏色或?qū)⑵?a target="_blank">綁定到UI元素。
包含調(diào)色板的主題
預(yù)定義的調(diào)色板
調(diào)色板主題包括以下預(yù)定義的調(diào)色板:
在代碼中應(yīng)用調(diào)色板
提示:當您切換主題時,應(yīng)用程序不會卸載已加載的主題程序集。
- 在項目中引用 Mono.cecil NuGet包。
- 調(diào)用Theme.RegisterPredefinedPaletteThemes方法來啟用預(yù)定義的調(diào)色板。
- 將ApplicationThemeHelper.ApplicationThemeName屬性設(shè)置為所需的predefined palette名稱和base theme名稱組合。
C#:
Theme.RegisterPredefinedPaletteThemes(); ApplicationThemeHelper.ApplicationThemeName = PredefinedThemePalettes.RedWine.Name + Theme.Office2019White.Name;
VB.NET:
Theme.RegisterPredefinedPaletteThemes() ApplicationThemeHelper.ApplicationThemeName = PredefinedThemePalettes.RedWine.Name + Theme.Office2019White.Name
提示:可以使用Theme.CachePaletteThemes屬性來緩存當前的調(diào)色板主題程序集,緩存減少了將來應(yīng)用程序運行時的加載時間。
上面的代碼示例為當前主題啟用了all available palettes ,要啟用并應(yīng)用single palette則需要:
- 在項目中引用 Mono.cecil NuGet包。
- 將調(diào)色板和基本主題傳遞給Theme.CreateTheme方法來創(chuàng)建新主題。
- 將 theme傳遞給Theme.RegisterTheme方法。
- 將ApplicationThemeHelper.ApplicationThemeName屬性設(shè)置為主題名稱。
C#:
var palettetheme = Theme.CreateTheme(PredefinedThemePalettes.RedWine, Theme.Office2019White); Theme.RegisterTheme(palettetheme); ApplicationThemeHelper.ApplicationThemeName = palettetheme.Name;
VB.NET:
Dim palettetheme = Theme.CreateTheme(PredefinedThemePalettes.RedWine, Theme.Office2019White) Theme.RegisterTheme(palettetheme) ApplicationThemeHelper.ApplicationThemeName = palettetheme.Name
將調(diào)色板應(yīng)用到觸摸主題
- 將主題的調(diào)色板和非觸摸版本傳遞給ThemeCreateTheme方法。
- 將;Touch后綴附加到應(yīng)用程序主題名稱并應(yīng)用該主題。
下面的代碼示例將帶有TouchPalette的Office2019BlackTouch應(yīng)用于應(yīng)用程序:
C#:
var palette = new ThemePalette("TouchPalette"); var theme = Theme.CreateTheme(palette, Theme.Office2019Black); Theme.RegisterTheme(theme); ApplicationThemeHelper.ApplicationThemeName = theme.Name + ";Touch";
VB.NET:
Dim palette = New ThemePalette("TouchPalette") Dim theme = Theme.CreateTheme(palette, Theme.Office2019Black) Theme.RegisterTheme(theme) ApplicationThemeHelper.ApplicationThemeName = theme.Name & ";Touch"
在Ribbon Gallery顯示調(diào)色板
您可以在 Ribbon Gallery中顯示預(yù)定義的調(diào)色板來允許用戶選擇調(diào)色板并將其應(yīng)用于當前主題:
1.引用 DevExpress.Mvvm.v23.1.dll程序集。
2.在應(yīng)用程序啟動時調(diào)用ThemeRegisterPredefinedPaletteThemes方法來啟用這些調(diào)色板:
C#:
public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { Theme.RegisterPredefinedPaletteThemes(); base.OnStartup(e); } }
VB.NET:
Public Partial Class App Inherits Application Protected Overrides Sub OnStartup(ByVal e As StartupEventArgs) Theme.RegisterPredefinedPaletteThemes() MyBase.OnStartup(e) End Sub End Class
3.將RibbonGalleryItemThemePaletteSelectorBehavior附加到一個RibbonGalleryBarItem上:
<dxr:RibbonGalleryBarItem ... > <dxmvvm:Interaction.Behaviors> <dxr:RibbonGalleryItemThemePaletteSelectorBehavior /> </dxmvvm:Interaction.Behaviors> </dxr:RibbonGalleryBarItem>
使用Windows強調(diào)色和應(yīng)用模式
將Win10Palette對象作為參數(shù)傳遞給任何ThemeCreateTheme方法來生成基于Win10Dark或Win10Light DevExpress主題的主題,這個調(diào)色板允許您獲得以下Windows主題設(shè)置,監(jiān)聽它們的變化,并將它們應(yīng)用到應(yīng)用程序中 :
- 強調(diào)色
- App模式(Dark/Light)[1]
Win10Palette適用于Windows 10及更高版本。
下面的代碼示例創(chuàng)建了一個基于Windows設(shè)置的顏色主題,并在啟動時將其應(yīng)用于應(yīng)用程序:
C#:
protected override void OnStartup(StartupEventArgs e) { var palette = new Win10Palette(true); var theme = Theme.CreateTheme(palette); Theme.RegisterTheme(theme); ApplicationThemeHelper.ApplicationThemeName = theme.Name; base.OnStartup(e); }
VB.NET:
Protected Overrides Sub OnStartup(ByVal e As StartupEventArgs) Dim palette = New Win10Palette() Dim theme = Theme.CreateTheme(palette) Theme.RegisterTheme(theme) ApplicationThemeHelper.ApplicationThemeName = theme.Name MyBase.OnStartup(e) End Sub
管理調(diào)色板設(shè)置
當創(chuàng)建Win10Palette實例時,您可以使用以下構(gòu)造函數(shù)參數(shù)來管理調(diào)色板設(shè)置:
- accentColor
指定調(diào)色板強調(diào)色,如果調(diào)色板找不到Windows強調(diào)色,則應(yīng)用程序的強調(diào)色設(shè)置為#FF0078D7。
- listenAccentColorChanges
指定是否獲取或忽略Windows強調(diào)色更改。
如果為true,當用戶在Windows中更改強調(diào)色時,Win10Palette執(zhí)行以下操作:
- 獲取Windows強調(diào)色。
- 創(chuàng)建帶有強調(diào)色的主題。
- 將主題應(yīng)用于應(yīng)用程序。
如果為false, Win10Palette將忽略Windows強調(diào)色的變化。
- appMode
指定應(yīng)用模式,如果調(diào)色板找不到Windows應(yīng)用程序模式,則將應(yīng)用程序應(yīng)用程序模式設(shè)置為Light。
- listenAppModeChanges
指定是獲取還是忽略Windows應(yīng)用程序模式更改。
如果為true,當用戶在Windows中更改強調(diào)色時,Win10Palette執(zhí)行以下操作:
- 獲取Windows應(yīng)用程序模式。
- 創(chuàng)建一個基于Dark/Light的主題(取決于所選擇的Windows應(yīng)用程序模式)。
- 將主題應(yīng)用于應(yīng)用程序。
如果為false, Win10Palette忽略Windows應(yīng)用程序模式更改。
顯示W(wǎng)indows系統(tǒng)顏色主題
DevExpress WPF控件包括System Color主題,這個主題采用Windows app mode和accent color設(shè)置,將其應(yīng)用到應(yīng)用程序中,并在用戶更改這些操作系統(tǒng)設(shè)置時更新應(yīng)用程序外觀,您可以在以下主題選擇器中顯示系統(tǒng)顏色主題:
- BarSubItemThemeSelectorBehavior
- BarSplitItemThemeSelectorBehavior
- RibbonGalleryItemThemeSelectorBehavior
- GalleryThemeSelectorBehavior
- HamburgerSubMenuThemeSelectorBehavior
要在主題選擇器中顯示W(wǎng)indows 10系統(tǒng)顏色主題,請將繼承的ShowWin10SystemColorTheme屬性設(shè)置為true。
自定義調(diào)色板
有關(guān)如何創(chuàng)建自定義主題調(diào)色板的詳細信息,請參閱以下WPF主題設(shè)計器幫助主題:編輯調(diào)色板顏色。
您可以通過以下方式導(dǎo)出調(diào)色板:
- 作為自定義主題
主題:在WPF主題設(shè)計器中構(gòu)建和導(dǎo)出新主題。
- 作為一個類(.cs文件)
主題:從WPF主題設(shè)計器導(dǎo)出調(diào)色板。
- 在代碼中重復(fù)對調(diào)色板所做的更改
在代碼中編輯調(diào)色板
提示:當您切換主題時,應(yīng)用程序不會卸載已加載的主題程序集。
請參閱以下幫助主題來獲取可用調(diào)色板顏色的完整列表:調(diào)色板顏色列表。
將自定義調(diào)色板應(yīng)用于應(yīng)用程序:
1.在項目中引用Mono.cecil NuGet包。
2.創(chuàng)建一個新的ThemePalette實例。
C#:
var custompalette = new ThemePalette("CustomPalette");
VB.NET:
Dim custompalette = New ThemePalette("CustomPalette")
或基于預(yù)定義的調(diào)色板創(chuàng)建新的ThemePalette實例,在這種情況下,新的調(diào)色板繼承預(yù)定義的調(diào)色板的顏色:
C#:
var custompalette = new ThemePalette("CustomPalette", PredefinedThemePalettes.RedWine);
VB.NET:
Dim custompalette = new ThemePalette("CustomPalette", PredefinedThemePalettes.RedWine)
3.使用themepaltte.setcolor方法來指定新的顏色:
C#:
custompalette.SetColor("Foreground", (Color)ColorConverter.ConvertFromString("#FFFF7200")); custompalette.SetColor("Backstage.Focused", Colors.White);
VB.NET:
custompalette.SetColor("Foreground", ColorConverter.ConvertFromString("#FF015C9F")) custompalette.SetColor("Foreground", Colors.White)
4.將調(diào)色板和一個支持調(diào)色板的主題傳遞給Theme.CreateTheme方法來創(chuàng)建一個新主題:
C#:
var customtheme = Theme.CreateTheme(custompalette, Theme.Office2016ColorfulSE);
VB.NET:
Dim customtheme = Theme.CreateTheme(custompalette, Theme.Office2016ColorfulSE)
5.將主題傳遞給Theme.RegisterTheme方法并設(shè)置ApplicationThemeHelper,ApplicationThemeName指定主題名稱用于將主題應(yīng)用到應(yīng)用程序:
C#:
Theme.RegisterTheme(customtheme); ApplicationThemeHelper.ApplicationThemeName = customtheme.Name;
VB.NET:
Theme.RegisterTheme(customtheme) ApplicationThemeHelper.ApplicationThemeName = customtheme.Name
完整的代碼示例:
C#:
var custompalette = new ThemePalette("CustomPalette"); custompalette.SetColor("Foreground", (Color)ColorConverter.ConvertFromString("#FFFF7200")); custompalette.SetColor("Backstage.Focused", Colors.White); var customtheme = Theme.CreateTheme(custompalette, Theme.Office2016ColorfulSE); Theme.RegisterTheme(customtheme); ApplicationThemeHelper.ApplicationThemeName = customtheme.Name;
VB.NET:
Dim custompalette = New ThemePalette("CustomPalette") custompalette.SetColor("Foreground", ColorConverter.ConvertFromString("#FF015C9F")) custompalette.SetColor("Backstage.Focused", Colors.White) Dim customtheme = Theme.CreateTheme(custompalette, Theme.Office2016ColorfulSE) Theme.RegisterTheme(customtheme) ApplicationThemeHelper.ApplicationThemeName = customtheme.Name
限制
在使用單文件部署的 .NET 5應(yīng)用程序運行時更改主題。
必須將DevExpress WPF主題程序集提取到磁盤。當您發(fā)布一個 .NET 5用程序時(PublishSingleFile為true),在項目文件中設(shè)置IncludeAllContentForSelfExtract選項為true,這將允許用戶在運行時應(yīng)用調(diào)色板。
<PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net5.0-windows</TargetFramework> <UseWPF>true</UseWPF> <Nullable>enable</Nullable> <PublishSingleFile>true</PublishSingleFile> <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract> </PropertyGroup>