主題
DevExpress WPF控件提供了30多個定制設(shè)計的應(yīng)用程序主題,您可以在免費的WPF主題設(shè)計器應(yīng)用程序中使用這些主題并且無需修改或自定義。
請參閱主題列表來獲取可用的主題列表,可以將每個主題應(yīng)用于DevExpress WPF控件和支持的標(biāo)準(zhǔn)WPF控件。
Lightweight Themes主題包含可用的輕量級主題列表,這些主題在視覺上復(fù)制常規(guī)主題,但提供更快的啟動時間和消耗更少的內(nèi)存。
當(dāng)您在應(yīng)用程序中引用DevExpress WPF庫時,應(yīng)用程序?qū)?yīng)用Office2019Colorful主題,這個主題影響所有的DevExpress WPF Controls和支持的標(biāo)準(zhǔn)WPF控件,您可以重置應(yīng)用于 Standard WPF Controls的DevExpress主題。
支持的標(biāo)準(zhǔn)控件列表
以下標(biāo)準(zhǔn)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主題中受支持。
應(yīng)用DevExpress主題
要應(yīng)用主題,必須在項目中引用主題程序集或主題NuGet包。
在應(yīng)用程序中應(yīng)用DevExpress主題
方法1
打開窗口或用戶控件的快速操作或智能標(biāo)簽,展開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程序集。
- 在應(yīng)用程序啟動時設(shè)置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添加到應(yīng)用程序中。
將DevExpress主題應(yīng)用到容器中
指定附加的ThemeManager.ThemeName屬性,您可以將該屬性應(yīng)用于DevExpress WPF控件和支持的WPF標(biāo)準(zhǔn)控件。下面的代碼示例將Office2016SEWhite主題應(yīng)用于ThemedWindow,將Office2019Black主題應(yīng)用于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>
重置應(yīng)用的DevExpress主題
當(dāng)您重置主題時,DevExpress WPF主題不再影響標(biāo)準(zhǔn)WPF控件,DevExpress WPF控件的外觀來自于內(nèi)置在控件組件中的DeepBlue主題。
重置應(yīng)用DevExpress主題到應(yīng)用程序
方法1
點擊窗口智能標(biāo)簽中的“X”按鈕(disablethem-button .png):
生成的App.config文件如下所示:
... <DXThemeManager> <setting name="ApplicationThemeName" serializeAs="String"> <value>None</value> </setting> </DXThemeManager> ...
如果使用Quick Actions,則需要手動編輯App.config文件。
方法2
在應(yīng)用程序啟動時設(shè)置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
重置應(yīng)用于容器的DevExpress主題
設(shè)置附加的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>
僅為標(biāo)準(zhǔn)WPF控件重置DevExpress主題
只有標(biāo)準(zhǔn)WPF的容器才能重置DevExpress主題Controls?:
- 重置應(yīng)用程序主題。
- 僅對包含DevExpress WPF控件的容器應(yīng)用主題。
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>
保存運行時應(yīng)用的主題
應(yīng)用程序在啟動時會使用應(yīng)用程序配置文件中指定的主題,調(diào)用ApplicationThemeHelper.SaveApplicationThemeName方法將當(dāng)前主題保存到應(yīng)用程序的配置文件中:
C#:
ApplicationThemeHelper.ApplicationThemeName = Theme.MetropolisLightName; ApplicationThemeHelper.SaveApplicationThemeName();
VB.NET:
ApplicationThemeHelper.ApplicationThemeName = Theme.MetropolisLightName ApplicationThemeHelper.SaveApplicationThemeName()
添加一個主題選擇器到應(yīng)用程序中
DevExpress WPF控件包括以下MVVM行為,允許在應(yīng)用程序中實現(xiàn)主題選擇器:
選擇器 | GitHub 例子 |
---|---|
BarSubItemThemeSelectorBehavior | Example |
BarSplitItemThemeSelectorBehavior | Example |
GalleryThemeSelectorBehavior | Example |
RibbonGalleryItemThemeSelectorBehavior | Example |
HamburgerSubMenuThemeSelectorBehavior | Example |
使用傳統(tǒng)的默認(rèn)主題
您可以使用CompatibilitySettings.LegacyDefaultTheme屬性來指定應(yīng)用程序應(yīng)使用的舊版默認(rèn)主題:
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應(yīng)用模式
最新的DevExpress WPF主題家族包括System主題,這個主題不引入自己的新外觀和感覺選項,相反它讀取Windows設(shè)置并應(yīng)用一個現(xiàn)有主題來匹配當(dāng)前的操作系統(tǒng)外觀,然后您的應(yīng)用程序看起來與用戶在其機器上運行的其他軟件一致。
下表列出系統(tǒng)主題名稱及對應(yīng)主題在暗/亮操作系統(tǒng)模式下生效:
您應(yīng)該同時引用(Dark和Light)兩個主題版本的程序集/NuGet包,例如要允許Win11System主題在Win11Light和Win11Dark主題之間切換,應(yīng)該選擇以下任何一個選項:
- 參考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主題應(yīng)用于應(yīng)用程序:
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主題在主題選擇器中可用。
應(yīng)用觸摸主題
DevExpress WPF觸摸主題只影響元素的外觀(大小、填充、邊距等)。
添加;Touch到主題名稱后,應(yīng)用 touch-friendly的主題版本:
提示:TouchlineDark主題是 touch-friendly (默認(rèn)設(shè)置),您不需要在其主題名稱后面附加;Touch。
<ThemedWindow ... xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core" dx:ThemeManager.ThemeName="Office2013;Touch"> ... </ThemedWindow>
預(yù)加載主題
控件在運行應(yīng)用程序時加載主題資源,使用
輕量級模板
輕量級模板包含更少的可視化元素,并減少了加載DevExpress WPF Controls所需的時間,以下主題支持輕量級模板:
下表列出了支持輕量級模板的 DevExpress WPF Controls以及您應(yīng)該用來啟用/禁用輕量級模板的屬性:
標(biāo)準(zhǔn)WPF控件屬性
當(dāng)應(yīng)用程序使用下面的DevExpress WPF Themes之一時,您可以指定Background、 BorderBrush和BorderThickness屬性值來改變標(biāo)準(zhǔn)WPF控件的外觀:
下面的代碼示例在應(yīng)用Office2016WhiteSE主題時會將標(biāo)準(zhǔn)WPF Button 的background屬性設(shè)置為紅色:
<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>