You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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. 可选:保存主题偏好(下次启动自动加载)

  1. 右键项目 → 属性 → 设置,添加一个布尔类型的设置项IsDarkTheme,默认值设为False。
  2. 在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();
    }
}
  1. 修改切换方法,添加保存逻辑:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 19:02:26