【WPF】-MahApps创建属于自己的自定义主题

一、查看官方文档 https://mahapps.com/docs/themes/thememanager

  按照官方文档,基本可以完成自定义主题。

 但是所有的颜色需要自己按照https://github.com/MahApps/MahApps.Metro/blob/develop/src/MahApps.Metro/Styles/Themes/Theme.Template.xaml这个模板填充,岂不是会累死人。

二、本文介绍一下比较省事的方法

1.下载MahApps.Metro的源码,编译通过

2.在文件夹MahApps.Metro\Styles\Themes下有一个GeneratorParameters.json文件

 View Code

看出规律了吧,你只需要加上自己的即可,如:

    {
      "Name": "MyColor",
      "Values": {
        "MahApps.Colors.AccentBase": "#FF825A2C",
        "MahApps.Colors.Accent": "#CC825A2C",
        "MahApps.Colors.Accent2": "#99825A2C",
        "MahApps.Colors.Accent3": "#66825A2C",
        "MahApps.Colors.Accent4": "#33825A2C",
        "MahApps.Colors.Highlight": "#FF604220"
      }
    },
 
3.然后重新编译源码,你会发现MahApps.Metro\Styles\Themes多了你自定义的主题。
4.这个时候,你拿个这个编译完成的dll去引用,那么你的工程就可以使用你自定义的主题。
5.但是,这不是最佳方法,下面介绍还是安装nuget包的方法进行自定义主题。
6.打开你的工程,安装MahApps.Metro包
7.把上面3过程生成的主题拷贝到你的工程一个文件夹下,可能有很多个主题,用一个文件清单加入
 View Code
8.最后一步:程序加载主题
复制代码
   StreamReader reader = new StreamReader(Application.GetResourceStream(new Uri("pack://application:,,,/AIStudio.Resource;component/Brushs/brush.json", UriKind.RelativeOrAbsolute)).Stream);
                string text = reader.ReadToEnd();
                var dic = JsonConvert.DeserializeObject<Dictionary<string, string[]>>(text);
                foreach (var brush in dic.Values.SelectMany(p => p))
                {
                    ThemeManager.Current.AddLibraryTheme(new LibraryTheme(new Uri(brush), MahAppsLibraryThemeProvider.DefaultInstance));
                }
复制代码
posted @ 2024-02-19 09:47  VisionCode  阅读(82)  评论(0编辑  收藏  举报