主题
DevExpress WPF控件提供了30多个定制设计的应用程序主题,您可以在免费的WPF主题设计器应用程序中使用这些主题并且无需修改或自定义。
请参阅主题列表来获取可用的主题列表,可以将每个主题应用于DevExpress WPF控件和支持的标准WPF控件。
Lightweight Themes主题包含可用的轻量级主题列表,这些主题在视觉上复制常规主题,但提供更快的启动时间和消耗更少的内存。
当您在应用程序中引用DevExpress WPF库时,应用程序将应用Office2019Colorful主题,这个主题影响所有的DevExpress WPF Controls和支持的标准WPF控件,您可以重置应用于 Standard WPF Controls的DevExpress主题。
支持的标准控件列表
以下标准WPF控件支持DevExpress WPF主题:
- System.Windows.Button
- System.Windows.CheckBox
- System.Windows.ComboBox
- System.Windows.ComboBoxItem
- System.Windows.ContextMenu? *
- System.Windows.Expander
- System.Windows.GridSplitter
- System.Windows.GroupBox
- System.Windows.Label
- System.Windows.ListBox
- System.Windows.ListBoxItem
- System.Windows.Menu?*
- System.Windows.Page
- System.Windows.PasswordBox?*
- System.Windows.ProgressBar
- System.Windows.RadioButton
- System.Windows.Controls.Primitives.ScrollBar
- System.Windows.ScrollViewer
- System.Windows.Separator
- System.Windows.Slider
- System.Windows.TabControl
- System.Windows.TabItem
- System.Windows.TextBox
- System.Windows.ToolTip
- System.Windows.TreeView
- System.Windows.TreeViewItem?el
这些控件仅在Office2016SE、VS2017、Office2019和VS2019主题中受支持。
应用DevExpress主题
要应用主题,必须在项目中引用主题程序集或主题NuGet包。
在应用程序中应用DevExpress主题
方法1
打开窗口或用户控件的快速操作或智能标签,展开ApplicationTheme下拉列表然后选择一个主题,该列表仅显示项目中引用的主题。
生成的App.config文件如下所示:
- .NET
App.config:
... <configuration> <configSections> <section name="DXThemeManager" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> </configSections> <DXThemeManager> <setting name="ApplicationThemeName" serializeAs="String"> <value>Office2019Colorful</value> </setting> </DXThemeManager> </configuration> ...
- .NET Framework
App.config:
<configuration> <configSections> <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > <section name="DXThemeManager" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> </sectionGroup> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /> </startup> <userSettings> <DXThemeManager> <setting name="ApplicationThemeName" serializeAs="String"> <value>Office2019Colorful</value> </setting> </DXThemeManager> </userSettings> </configuration>
方法2
这种方法覆盖了方法1对App.config文件所做的更改。
- 参考DevExpress.Data.Desktop.v23.1程序集。
- 在应用程序启动时设置ApplicationThemeHelper.ApplicationThemeName属性为主题名称。
C#:
public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { ApplicationThemeHelper.ApplicationThemeName = Theme.MetropolisLightName; base.OnStartup(e); } }
VB.NET:
Class Application Protected Overrides Sub OnStartup(e As StartupEventArgs) ApplicationThemeHelper.ApplicationThemeName = Theme.MetropolisLightName MyBase.OnStartup(e) End Sub End Class
提示:您可以将RibbonGalleryItemThemeSelector添加到应用程序中。
将DevExpress主题应用到容器中
指定附加的ThemeManager.ThemeName属性,您可以将该属性应用于DevExpress WPF控件和支持的WPF标准控件。下面的代码示例将Office2016SEWhite主题应用于ThemedWindow,将Office2019Black主题应用于GridControl:
<ThemedWindow ... xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core" xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid" dx:ThemeManager.ThemeName="Office2016SEWhite"> <dxg:GridControl dx:ThemeManager.ThemeName="Office2019Black"> ... </dxg:GridControl> </ThemedWindow>
重置应用的DevExpress主题
当您重置主题时,DevExpress WPF主题不再影响标准WPF控件,DevExpress WPF控件的外观来自于内置在控件组件中的DeepBlue主题。
重置应用DevExpress主题到应用程序
方法1
点击窗口智能标签中的“X”按钮(disablethem-button .png):
生成的App.config文件如下所示:
... <DXThemeManager> <setting name="ApplicationThemeName" serializeAs="String"> <value>None</value> </setting> </DXThemeManager> ...
如果使用Quick Actions,则需要手动编辑App.config文件。
方法2
在应用程序启动时设置ApplicationThemeHelper.ApplicationThemeName属性为Theme.NoneName,这种方法覆盖了使用方法1对App.config文件所做的更改。
C#:
using DevExpress.Xpf.Core; ... public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { ApplicationThemeHelper.ApplicationThemeName = Theme.NoneName; base.OnStartup(e); } }
VB.NET:
Imports DevExpress.Xpf.Core ... Public Partial Class App Inherits Application Protected Overrides Sub OnStartup(ByVal e As StartupEventArgs) ApplicationThemeHelper.ApplicationThemeName = Theme.NoneName MyBase.OnStartup(e) End Sub End Class
重置应用于容器的DevExpress主题
设置附加的ThemeManager.ThemeName属性为None:
<ThemedWindow ... xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core" xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"> <dxg:GridControl dx:ThemeManager.ThemeName="None"> ... </dxg:GridControl> </ThemedWindow>
仅为标准WPF控件重置DevExpress主题
只有标准WPF的容器才能重置DevExpress主题Controls?:
- 重置应用程序主题。
- 仅对包含DevExpress WPF控件的容器应用主题。
App.config:
... <DXThemeManager> <setting name="ApplicationThemeName" serializeAs="String"> <value>None</value> </setting> </DXThemeManager> ...
MainWindoe.xaml:
<ThemedWindow ... xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core" xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"> <dxg:GridControl dx:ThemeManager.ThemeName="Office2019White"> ... </dxg:GridControl> <ComboBox> ... </ComboBox> </ThemedWindow>
保存运行时应用的主题
应用程序在启动时会使用应用程序配置文件中指定的主题,调用ApplicationThemeHelper.SaveApplicationThemeName方法将当前主题保存到应用程序的配置文件中:
C#:
ApplicationThemeHelper.ApplicationThemeName = Theme.MetropolisLightName; ApplicationThemeHelper.SaveApplicationThemeName();
VB.NET:
ApplicationThemeHelper.ApplicationThemeName = Theme.MetropolisLightName ApplicationThemeHelper.SaveApplicationThemeName()
添加一个主题选择器到应用程序中
DevExpress WPF控件包括以下MVVM行为,允许在应用程序中实现主题选择器:
选择器 | GitHub 例子 |
---|---|
BarSubItemThemeSelectorBehavior | Example |
BarSplitItemThemeSelectorBehavior | Example |
GalleryThemeSelectorBehavior | Example |
RibbonGalleryItemThemeSelectorBehavior | Example |
HamburgerSubMenuThemeSelectorBehavior | Example |
使用传统的默认主题
您可以使用CompatibilitySettings.LegacyDefaultTheme属性来指定应用程序应使用的旧版默认主题:
C#:
using DevExpress.Xpf.Core; ... public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { CompatibilitySettings.LegacyDefaultTheme = LegacyDefaultTheme.Office2016White; base.OnStartup(e); } }
VB.NET:
Imports DevExpress.Xpf.Core ... Public Partial Class App Inherits Application Protected Overrides Sub OnStartup(ByVal e As StartupEventArgs) CompatibilitySettings.LegacyDefaultTheme = LegacyDefaultTheme.Office2016White MyBase.OnStartup(e) End Sub End Class
使用Windows应用模式
最新的DevExpress WPF主题家族包括System主题,这个主题不引入自己的新外观和感觉选项,相反它读取Windows设置并应用一个现有主题来匹配当前的操作系统外观,然后您的应用程序看起来与用户在其机器上运行的其他软件一致。
下表列出系统主题名称及对应主题在暗/亮操作系统模式下生效:
您应该同时引用(Dark和Light)两个主题版本的程序集/NuGet包,例如要允许Win11System主题在Win11Light和Win11Dark主题之间切换,应该选择以下任何一个选项:
- 参考DevExpress.Xpf.Themes.Win11Dark.v22.2.dll和DevExpress.Xpf.Themes.Win11Light.v22.2.dll程序集。
- 参考DevExpress.Wpf.Themes.Win11Dark和DevExpress.Wpf.Themes.Win11LightNuGet 包。
- 参考DevExpress.Wpf.Themes.AllNuGet 包。
以下代码示例将VS2019System主题应用于应用程序:
C#:
public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { ApplicationThemeHelper.ApplicationThemeName = Theme.VS2019SystemName; base.OnStartup(e); } }
VB.NET:
Class Application Protected Overrides Sub OnStartup(e As StartupEventArgs) ApplicationThemeHelper.ApplicationThemeName = Theme.VS2019SystemName MyBase.OnStartup(e) End Sub End Class
System主题在主题选择器中可用。
应用触摸主题
DevExpress WPF触摸主题只影响元素的外观(大小、填充、边距等)。
添加;Touch到主题名称后,应用 touch-friendly的主题版本:
提示:TouchlineDark主题是 touch-friendly (默认设置),您不需要在其主题名称后面附加;Touch。
<ThemedWindow ... xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core" dx:ThemeManager.ThemeName="Office2013;Touch"> ... </ThemedWindow>
预加载主题
控件在运行应用程序时加载主题资源,使用
轻量级模板
轻量级模板包含更少的可视化元素,并减少了加载DevExpress WPF Controls所需的时间,以下主题支持轻量级模板:
下表列出了支持轻量级模板的 DevExpress WPF Controls以及您应该用来启用/禁用轻量级模板的属性:
标准WPF控件属性
当应用程序使用下面的DevExpress WPF Themes之一时,您可以指定Background、 BorderBrush和BorderThickness属性值来改变标准WPF控件的外观:
下面的代码示例在应用Office2016WhiteSE主题时会将标准WPF Button 的background属性设置为红色:
<dx:ThemedWindow ... xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core" dx:ThemeManager.Theme="Office2016WhiteSE"> <Grid> <Button Content="Button" Background="Red" /> </Grid> </dx:ThemedWindow>