轻量级主题
DevExpress轻量级主题在视觉上复制常规主题,但提供更快的启动时间和消耗更少的内存。
您可以在机器上比较常规和轻量级主题的性能,再运行我们在以下存储库中提供的特别设计的应用程序:
使用轻量级主题
将DevExpress.Wpf.ThemesLW NuGet包添加到您的项目中,或者引用DevExpress.Xpf.ThemesLW.v23.1程序集。
在应用程序构造函数中设置属性为true。
在应用程序启动时设置属性为主题名称,类包含可用的轻量级主题。
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
轻量级的主题改变应用程序中所有控件的外观,如果标准控件应该保持其原始外观,则将附加的 属性设置为false。
主题列表
Windows 10主题
Win10Dark:
Win10Light:
- Win10Dark
- Win10Light
- Win10System[1](读取Windows应用模式)
- Win10SystemColors[1](读取Windows应用程序模式和强调色)
Office 2019主题
Office2019Black:
Office2019Colorful (Default Theme):
Office2019HighContrast:
- Office2019Black
- Office2019Colorful(默认主题)
- Office2019HighContrast
- Office2019System[1](读取Windows应用模式)
- 还包括一组预定义的黑色和彩色主题调色板。
Visual Studio 2019主题
VS2019Blue:
VS2019Dark:
VS2019Light:
- VS2019Blue
- VS2019Dark
- VS2019Light
- VS2019System[1](读取Windows应用程序模式)
- 还包括一组预定义的蓝色、深色和浅色主题的调色板。
调色板
调色板允许将颜色(例如,公司颜色)集成到应用程序中,并自定义主题中使用的颜色,您可以创建自定义调色板或使用。
Palette是一个的命名颜色,每个条目包括一个ColorName和一个Color值,您可以使用ColorName为任意数量的UI元素分配相应的颜色。
预定义的调色板
类包含预定义的调色板主题和经典主题,下面的代码示例应用VS2019Dark主题与DeepSea调色板:
C#:
ApplicationThemeHelper.ApplicationThemeName = LightweightTheme.VS2019DarkDeepSea.Name;
VB.NET:
ApplicationThemeHelper.ApplicationThemeName = LightweightTheme.VS2019DarkDeepSea.Name
自定义调色板
您可以使用自定义调色板颜色来创建一个新的轻量级主题:
- 用调色板的颜色名称和它的新颜色创建一个Dictionary。
要找到所需的颜色名称,请查看以下文件夹中的轻量级主题资源:C:\Program Files\DevExpress 23.1\Components\Sources\XPF\DevExpress.Xpf.Themes\ThemesLW\Common。
- 使用方法创建一个新主题。
- 在中注册创建的主题。
- 将此主题应用到应用程序中。
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
修改轻量级主题资源
提示:我们不建议您修改可通过控件的内置API实现的任务的轻量级主题资源,轻量级主题资源和键可以在将来更改,因此更新到较新的DevExpress版本可能会更加复杂。
您可以自定义可视元素的主题资源(笔刷、厚度、颜色、样式、模板等),如下面的主题所述:。
轻量级主题被设计为使用一组特定的主题键,每个DevExpress WPF程序集都包含LWKeyExtension类,您可以使用它来修改在此控件库中定义的轻量级主题资源:
<Window ... xmlns:dxrt="//schemas.devexpress.com/winfx/2008/xaml/ribbon/themekeys" xmlns:dxgt="//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>
在轻量级主题中,您可以不受任何地使用DynamicResource和StaticResource标记扩展,例如以下代码在应用程序中的任何位置都有效:
<StackPanel ... xmlns:dxrt="//schemas.devexpress.com/winfx/2008/xaml/ribbon/themekeys" xmlns:dxgt="//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>
用于修改常规主题资源的主题键也可以用于轻量级主题,唯一的区别是轻量级主题中的常规主题键变得与主题无关(不管ThemeName属性值如何):
<Window ... xmlns:dxrt="//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>
使用说明
- 不支持。
- 轻量级主题没有触摸版本。
- 不能为轻量级主题。
- 在设计时不应用轻量级主题。
- 不能将轻量级主题应用于单个控件,只能应用于整个应用程序。