輕量級(jí)主題
DevExpress輕量級(jí)主題在視覺(jué)上復(fù)制常規(guī)主題,但提供更快的啟動(dòng)時(shí)間和消耗更少的內(nèi)存。
您可以在機(jī)器上比較常規(guī)和輕量級(jí)主題的性能,再運(yùn)行我們?cè)谝韵麓鎯?chǔ)庫(kù)中提供的特別設(shè)計(jì)的應(yīng)用程序:
View Example:WPF Lightweight Thtmes-Performance Tests
使用輕量級(jí)主題
將DevExpress.Wpf.ThemesLW NuGet包添加到您的項(xiàng)目中,或者引用DevExpress.Xpf.ThemesLW.v23.1程序集。
在應(yīng)用程序構(gòu)造函數(shù)中設(shè)置CompatibilitySettings.UseLightweightThemes屬性為true。
在應(yīng)用程序啟動(dòng)時(shí)設(shè)置ApplicationThemeHelperApplicationThemeName屬性為主題名稱,LightweightTheme類包含可用的輕量級(jí)主題。
C#:
using DevExpress.Xpf.Core; // ... public partial class App : Application { static App() { CompatibilitySettings.UseLightweightThemes = true; } protected override void OnStartup(StartupEventArgs e) { ApplicationThemeHelper.ApplicationThemeName = LightweightTheme.Win10Dark.Name; base.OnStartup(e); } }
VB.NET:
Imports DevExpress.Xpf.Core ' ... Public Partial Class App Inherits Application Private Shared Sub New() CompatibilitySettings.UseLightweightThemes = True End Sub Protected Overrides Sub OnStartup(ByVal e As StartupEventArgs) ApplicationThemeHelper.ApplicationThemeName = LightweightTheme.Win10Dark.Name MyBase.OnStartup(e) End Sub End Class
輕量級(jí)的主題改變應(yīng)用程序中所有控件的外觀,如果標(biāo)準(zhǔn)控件應(yīng)該保持其原始外觀,則將附加的dx:LightweightThemeManager.AllowStandardControlsTheming 屬性設(shè)置為false。
主題列表
Windows 10主題
Win10Dark:
Win10Light:
- Win10Dark
- Win10Light
- Win10System[1](讀取Windows應(yīng)用模式)
- Win10SystemColors[1](讀取Windows應(yīng)用程序模式和強(qiáng)調(diào)色)
Office 2019主題
Office2019Black:
Office2019Colorful (Default Theme):
Office2019HighContrast:
- Office2019Black
- Office2019Colorful(默認(rèn)主題)
- Office2019HighContrast
- Office2019System[1](讀取Windows應(yīng)用模式)
- 還包括一組預(yù)定義的黑色和彩色主題調(diào)色板。
Visual Studio 2019主題
VS2019Blue:
VS2019Dark:
VS2019Light:
- VS2019Blue
- VS2019Dark
- VS2019Light
- VS2019System[1](讀取Windows應(yīng)用程序模式)
- 還包括一組預(yù)定義的藍(lán)色、深色和淺色主題的調(diào)色板。
調(diào)色板
調(diào)色板允許將顏色(例如,公司顏色)集成到應(yīng)用程序中,并自定義主題中使用的顏色,您可以創(chuàng)建自定義調(diào)色板或使用預(yù)定義的調(diào)色板。
Palette是一個(gè)Dictionary的命名顏色,每個(gè)條目包括一個(gè)ColorName和一個(gè)Color值,您可以使用ColorName為任意數(shù)量的UI元素分配相應(yīng)的顏色。
預(yù)定義的調(diào)色板
LightweightTheme類包含預(yù)定義的調(diào)色板主題和經(jīng)典主題,下面的代碼示例應(yīng)用VS2019Dark主題與DeepSea調(diào)色板:
C#:
ApplicationThemeHelper.ApplicationThemeName = LightweightTheme.VS2019DarkDeepSea.Name;
VB.NET:
ApplicationThemeHelper.ApplicationThemeName = LightweightTheme.VS2019DarkDeepSea.Name
自定義調(diào)色板
您可以使用自定義調(diào)色板顏色來(lái)創(chuàng)建一個(gè)新的輕量級(jí)主題:
- 用調(diào)色板的顏色名稱和它的新顏色創(chuàng)建一個(gè)Dictionary。
要找到所需的顏色名稱,請(qǐng)查看以下文件夾中的輕量級(jí)主題資源:C:\Program Files\DevExpress 23.1\Components\Sources\XPF\DevExpress.Xpf.Themes\ThemesLW\Common。
- 使用LightweightTheme.OverridePalette方法創(chuàng)建一個(gè)新主題。
- 在LightweightThemeManager中注冊(cè)創(chuàng)建的主題。
- 將此主題應(yīng)用到應(yīng)用程序中。
C#:
var customPalette = new Dictionary<string, Color> { {"Foreground", (Color)ColorConverter.ConvertFromString("#FFFF7200")}, {"SelectionBackground", Colors.Orange} }; var customTheme = LightweightTheme.OverridePalette(LightweightTheme.Win10Dark, "CustomTheme", "Custom Theme", customPalette); LightweightThemeManager.RegisterTheme(customTheme); ApplicationThemeHelper.ApplicationThemeName = customTheme.Name;
VB.NET:
Dim customPalette = New Dictionary(Of String, Color) From { {"Foreground", CType(ColorConverter.ConvertFromString("#FFFF7200"), Color)}, {"SelectionBackground", Colors.Orange} } Dim customTheme = LightweightTheme.OverridePalette(LightweightTheme.Win10Dark, "CustomTheme", "Custom Theme", customPalette) LightweightThemeManager.RegisterTheme(customTheme) ApplicationThemeHelper.ApplicationThemeName = customTheme.Name
修改輕量級(jí)主題資源
提示:我們不建議您修改可通過(guò)控件的內(nèi)置API實(shí)現(xiàn)的任務(wù)的輕量級(jí)主題資源,輕量級(jí)主題資源和鍵可以在將來(lái)更改,因此更新到較新的DevExpress版本可能會(huì)更加復(fù)雜。
您可以自定義可視元素的主題資源(筆刷、厚度、顏色、樣式、模板等),如下面的主題所述:修改主題資源。
輕量級(jí)主題被設(shè)計(jì)為使用一組特定的主題鍵,每個(gè)DevExpress WPF程序集都包含LWKeyExtension類,您可以使用它來(lái)修改在此控件庫(kù)中定義的輕量級(jí)主題資源:
<Window ... xmlns:dxrt="http://schemas.devexpress.com/winfx/2008/xaml/ribbon/themekeys" xmlns:dxgt="http://schemas.devexpress.com/winfx/2008/xaml/grid/themekeys"> <Window.Resources> <!-- Overrides the 'GridColumnHeader.Background' theme resource in all themes: --> <SolidColorBrush x:Key="{dxgt:LWKey GridColumnHeader.Background}" Color="Red"/> <!-- Overrides the 'Backstage.Foreground' theme resource to 'Red' in all themes except 'Office2019Colorful'. In this theme, the code sets the resource to 'Blue': --> <SolidColorBrush x:Key="{dxrt:LWKey Backstage.Foreground}" Color="Red"/> <SolidColorBrush x:Key="{dxrt:LWKey Backstage.Foreground, ThemeName='Office2019Colorful'}" Color="Blue"/> <!-- LWKeys are similar to regular keys in most cases: --> <!-- For example, the '{dxgt:LWKey GridColumnHeader.Background}' key is equal to --> <!-- '{dxgt:GridColumnHeaderThemeKey ResourceKey=Background}' --> </Window.Resources> </Window>
在輕量級(jí)主題中,您可以不受任何限制地使用DynamicResource和StaticResource標(biāo)記擴(kuò)展,例如以下代碼在應(yīng)用程序中的任何位置都有效:
<StackPanel ... xmlns:dxrt="http://schemas.devexpress.com/winfx/2008/xaml/ribbon/themekeys" xmlns:dxgt="http://schemas.devexpress.com/winfx/2008/xaml/grid/themekeys"> <!-- The DynamicResource is updated each time the application theme is changed. --> <!-- The StaticResource is resolved only once at the application startup. --> <Button Background="{StaticResource {dxgt:LWKey GridControl.Foreground}}"/> <Button Background="{DynamicResource {dxrt:LWKey Backstage.Foreground}}"/> </StackPanel>
用于修改常規(guī)主題資源的主題鍵也可以用于輕量級(jí)主題,唯一的區(qū)別是輕量級(jí)主題中的常規(guī)主題鍵變得與主題無(wú)關(guān)(不管ThemeName屬性值如何):
<Window ... xmlns:dxrt="http://schemas.devexpress.com/winfx/2008/xaml/ribbon/themekeys"> <Window.Resources> <!-- The following code does not work because the ThemeName property (defined in regular theme keys) is omitted in lightweight themes: --> <SolidColorBrush x:Key="{dxrt:BackstageThemeKey ResourceKey=Foreground, ThemeName=Office2019Colorful}" Color="Red"/> <SolidColorBrush x:Key="{dxrt:BackstageThemeKey ResourceKey=Foreground, ThemeName=Office2019Black}" Color="Blue"/> </Window.Resources> </Window>
使用說(shuō)明
- 不支持WPF主題設(shè)計(jì)器。
- 輕量級(jí)主題沒(méi)有觸摸版本。
- 不能為輕量級(jí)主題預(yù)加載主題資源。
- 在設(shè)計(jì)時(shí)不應(yīng)用輕量級(jí)主題。
- 不能將輕量級(jí)主題應(yīng)用于單個(gè)控件,只能應(yīng)用于整個(gè)應(yīng)用程序。