如何在WPF中运行时切换Material Design的浅色与深色主题?
运行时切换WPF MaterialDesign浅色/深色主题方案
1. 调整App.xaml中的主题配置
给BundledTheme添加命名,方便后台代码访问:
<Application.Resources> <materialDesign:BundledTheme x:Name="AppBundledTheme" BaseTheme="Light" PrimaryColor="DeepPurple" SecondaryColor="DeepOrange" /> </Application.Resources>
2. 编写主题切换逻辑
在代码后台(比如MainWindow.xaml.cs或者ViewModel)添加切换方法,先引入命名空间:
using MaterialDesignThemes.Wpf; using System.Linq;
然后实现切换方法:
// 切换主题,isDark为true时切换深色,false切换浅色 private void SwitchTheme(bool isDark) { // 获取全局的BundledTheme实例 var theme = Application.Current.Resources.OfType<BundledTheme>().FirstOrDefault(); if (theme == null) return; // 修改基础主题 theme.BaseTheme = isDark ? BaseTheme.Dark : BaseTheme.Light; // 刷新主题使变更生效 MaterialDesignThemeExtensions.RefreshTheme(); }
3. 添加UI切换控件
在界面上添加触发切换的控件,比如一个ToggleButton:
<ToggleButton x:Name="ThemeToggleBtn" Content="切换到深色主题" Margin="10" Click="ThemeToggleBtn_Click" />
然后绑定点击事件处理逻辑:
private void ThemeToggleBtn_Click(object sender, RoutedEventArgs e) { var toggleBtn = sender as ToggleButton; bool isDarkMode = toggleBtn.IsChecked ?? false; SwitchTheme(isDarkMode); // 更新按钮文本提示 toggleBtn.Content = isDarkMode ? "切换到浅色主题" : "切换到深色主题"; }
4. 可选:保存主题偏好(下次启动自动加载)
- 右键项目 → 属性 → 设置,添加一个布尔类型的设置项
IsDarkTheme,默认值设为False。 - 在App.xaml.cs的
OnStartup方法中加载保存的主题:
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); var theme = Application.Current.Resources.OfType<BundledTheme>().FirstOrDefault(); if (theme != null) { bool savedDarkMode = Properties.Settings.Default.IsDarkTheme; theme.BaseTheme = savedDarkMode ? BaseTheme.Dark : BaseTheme.Light; MaterialDesignThemeExtensions.RefreshTheme(); } }
- 修改切换方法,添加保存逻辑:
private void SwitchTheme(bool isDark) { var theme = Application.Current.Resources.OfType<BundledTheme>().FirstOrDefault(); if (theme == null) return; theme.BaseTheme = isDark ? BaseTheme.Dark : BaseTheme.Light; MaterialDesignThemeExtensions.RefreshTheme(); // 保存主题设置 Properties.Settings.Default.IsDarkTheme = isDark; Properties.Settings.Default.Save(); }
内容的提问来源于stack exchange,提问作者SW Wanted
相关产品推荐
相关产品推荐

