如何在MahApps.Metro中添加自定义.xaml深色主题
搞定MahApps.Metro自定义深色主题的步骤
嘿,我之前也折腾过这个,给你一步步拆解决方法,亲测有效:
1. 先建自定义主题的资源文件
不用纠结非要跟官方的Styles/Accents路径完全一致,但为了好管理,建议在你的WPF项目里新建个Styles/Accents文件夹。然后在里面加两个资源字典:
MyCustomDarkBase.xaml:这就是你要的自定义深色基础主题(对应官方的BaseDark)MyCustomAccent.xaml:如果想改按钮、选中状态这些强调色就建这个,要是只改基础的深浅色调,也可以先只弄Base文件,后续再加也没问题。
2. 填充自定义主题的内容
你可以先把MahApps官方的BaseDark.xaml内容复制过来改——要么去GitHub扒源码,要么在你项目的NuGet包目录里找到MahApps的程序集,解压后找到对应的BaseDark.xaml文件复制。
拿到内容后,就可以改里面的颜色资源了,比如:
<!-- 把主题背景改成更深的纯黑调 --> <SolidColorBrush x:Key="MahApps.Brushes.ThemeBackground" Color="#0F0F0F" /> <!-- 前景色改成偏暖的浅灰,避免刺眼 --> <SolidColorBrush x:Key="MahApps.Brushes.ThemeForeground" Color="#F0F0F0" />
要是做自定义Accent,就复制官方的某个Accent文件(比如Blue.xaml),改里面的MahApps.Brushes.Accent这类颜色值就行。
3. 把自定义主题注册到ThemeManager
这步很关键,不然切换的时候ThemeManager找不到你的主题。打开App.xaml.cs,在OnStartup方法里加注册代码:
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); // 注册自定义深色基础主题 ThemeManager.Current.AddTheme( new Theme("MyCustomDark", "CustomDark", new Uri("pack://application:,,,/你的项目名称;component/Styles/Accents/MyCustomDarkBase.xaml"))); // 要是有自定义Accent,也一起注册 ThemeManager.Current.AddAccent( "MyCustomAccent", new Uri("pack://application:,,,/你的项目名称;component/Styles/Accents/MyCustomAccent.xaml")); }
记得把你的项目名称换成你实际的项目名哦。
4. 切换到自定义主题
现在就可以用你已经写好的切换逻辑调用了,比如按钮点击事件里:
private void SwitchToCustomDarkBtn_Click(object sender, RoutedEventArgs e) { // 只切换基础深色主题 ThemeManager.Current.ChangeAppTheme(Application.Current, "MyCustomDark"); // 要是搭配自定义Accent,就这么写: // ThemeManager.Current.ChangeAppStyle(Application.Current, // ThemeManager.Current.GetAccent("MyCustomAccent"), // ThemeManager.Current.GetTheme("MyCustomDark")); }
5. 踩坑提醒
- 一定要检查自定义资源文件的生成操作是不是设成了
Resource(右键文件→属性→生成操作,选资源),不然加载不到。 - Uri路径别写错,项目名、文件夹结构要对应上,少一个斜杠都不行。
- 要是主题没生效,用Snoop这类工具看看控件的资源是不是加载了你的自定义颜色,能快速定位问题。
内容的提问来源于stack exchange,提问作者Soya
相关产品推荐
相关产品推荐

