翼度科技»论坛 编程开发 .net 查看内容

Winform 巨好看的控件库推荐:MaterialSkin.2

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
MaterialSkin.2 控件包是在 MaterialSkin 及基础上二次开发而来的,在原控件基础上修复了一些Bug,丰富了主题以及动画效果,效果非常好。


  • MaterialSkin.2 现在处于不活跃状态
  • 文中用 MaterialSkin 代替 MaterialSkin.2
Preview

先贴几张演示Demo中的效果图:





......
Install

在 NuGet 中搜索 MaterialSkin 就能找到控件包,直接安装就行:

注意版本框架
工具箱可能不会显示 MaterialSkin 的控件,需要我们手动添加下:
工具箱 -> 右击:添加选项卡 -> 把 NuGet 安装包里的 DLL 文件拖到选项卡里

简单尝鲜


  • 切换使用MaterialForm:
    添加引用:using MaterialSkin.Controls;
    窗体继承换成:public partial class Form1 : MaterialForm
    这个时候切换到设计器就可以看到Material效果的窗体了:

切换主题以及配色方案

在后台代码中添加一个只读的MaterialSkinManager变量,通过这个变量来控制主题和配色,把ReadMe.md给出的例程调整一下方便后续调整:
  1. public partial class Form1 : MaterialForm
  2. {
  3.   private readonly MaterialSkinManager materialSkinManager;   
  4.   public Form1()
  5.   {
  6.     InitializeComponent();
  7.     materialSkinManager = MaterialSkinManager.Instance;        // 初始化 MaterialSkinManager 实例
  8.     materialSkinManager.AddFormToManage(this);        // 将要应用 Material Design 的窗体添加到管理列表中
  9.     materialSkinManager.Theme = MaterialSkinManager.Themes.LIGHT;        // Theme 属性用来设置整体的主题
  10.     materialSkinManager.ColorScheme = new ColorScheme(Primary.BlueGrey800, Primary.BlueGrey900, Primary.BlueGrey500, Accent.LightBlue200, TextShade.WHITE);        // ColorScheme 属性来设置配色方案
  11.   }
  12. }
复制代码
上面代码写完运行程序就会是我们配置的配色及主题:

MaterialSkinManager主要是通过Themes以及ColorScheme来控制页面的显示效果,前者控制主题,后者控制配色:

  • Themes主要是用来切换深色和浅色主题的,对应LIGHT和DARK
  • ColorScheme主要是用来调整页面的配色方案的,它的构造函数提供了两种不同的重载形式,用于创建颜色方案:

      1. public ColorScheme(Primary primary, Primary darkPrimary, Primary lightPrimary, Accent accent, TextShade textShade)
      复制代码
      这个构造函数接受 Primary 和 Accent 枚举类型作为参数,用于指定主颜色和强调色。Primary 枚举包含一系列预定义的主颜色,而 Accent 枚举包含一系列预定义的强调色。此构造函数还接受 TextShade 枚举类型的参数,用于指定文本的明暗色调。通过使用这个构造函数,你可以轻松地选择 颜色方案的不同变体。[例程中使用的就是这个重载]
      1. public ColorScheme(Color primary, Color darkPrimary, Color lightPrimary, Color accent, TextShade textShade)
      复制代码
      这个构造函数接受 Color 类型的参数,用于直接指定自定义的颜色。你可以传入具体的颜色对象作为参数,以定义主颜色、深色主颜色、浅色主颜色、强调色以及文本明暗色调。
    先看主题,创建一个改变主题的MaterialButton实现深色和浅色主题的切换了:

  1. private void btn_ChangeTheme_Click(object sender, EventArgs e)
  2. {
  3.     materialSkinManager.Theme = materialSkinManager.Theme == MaterialSkinManager.Themes.DARK ? MaterialSkinManager.Themes.LIGHT : MaterialSkinManager.Themes.DARK;
  4. }
复制代码
再看配色方案,在此之前我们先在页面上随便加一些控件便于显示配色效果:

更改配色方案:
  1. private int colorSchemeIndex;   // 通过更换次数,方便循环更换颜色
  2. private void btn_SwitchColor_Click(object sender, EventArgs e)
  3. {
  4.     colorSchemeIndex++;
  5.     if (colorSchemeIndex == 6)
  6.     {
  7.         colorSchemeIndex = 0;
  8.     }
  9.     SwitchColor(colorSchemeIndex);
  10. }
  11. private void SwitchColor(int colorSchemeIndex)
  12. {
  13.     switch (colorSchemeIndex)
  14.     {
  15.         case 0:
  16.             materialSkinManager.ColorScheme = new ColorScheme(
  17.                 materialSkinManager.Theme == MaterialSkinManager.Themes.DARK ? Primary.Teal500 : Primary.Indigo500,
  18.                 materialSkinManager.Theme == MaterialSkinManager.Themes.DARK ? Primary.Teal700 : Primary.Indigo700,
  19.                 materialSkinManager.Theme == MaterialSkinManager.Themes.DARK ? Primary.Teal200 : Primary.Indigo100,
  20.                 Accent.Pink200,
  21.                 TextShade.WHITE);
  22.             break;
  23.         case 1:
  24.             materialSkinManager.ColorScheme = new ColorScheme(
  25.                 Primary.Green600,
  26.                 Primary.Green700,
  27.                 Primary.Green200,
  28.                 Accent.Red100,
  29.                 TextShade.WHITE);
  30.             break;
  31.         case 2:
  32.             materialSkinManager.ColorScheme = new ColorScheme(
  33.                 Primary.BlueGrey800,
  34.                 Primary.BlueGrey900,
  35.                 Primary.BlueGrey500,
  36.                 Accent.LightBlue200,
  37.                 TextShade.WHITE);
  38.             break;
  39.         case 3:
  40.             materialSkinManager.ColorScheme = new ColorScheme(
  41.                 Primary.Red800,
  42.                 Primary.Red900,
  43.                 Primary.Red500,
  44.                 Accent.Green200,
  45.                 TextShade.WHITE);
  46.             break;
  47.         case 4:
  48.             materialSkinManager.ColorScheme = new ColorScheme(
  49.                 Primary.Yellow800,
  50.                 Primary.Yellow900,
  51.                 Primary.Yellow500,
  52.                 Accent.DeepOrange200,
  53.                 TextShade.WHITE);
  54.             break;
  55.         case 5:
  56.             materialSkinManager.ColorScheme = new ColorScheme(
  57.                 Primary.DeepOrange800,
  58.                 Primary.DeepOrange900,
  59.                 Primary.DeepOrange500,
  60.                 Accent.Yellow200,
  61.                 TextShade.WHITE);
  62.             break;
  63.         case 6:
  64.             materialSkinManager.ColorScheme = new ColorScheme(
  65.                 Primary.Lime800,
  66.                 Primary.Lime900,
  67.                 Primary.Lime500,
  68.                 Accent.Green200,
  69.                 TextShade.WHITE);
  70.             break;
  71.     }
  72.     Invalidate(); // 重绘控件
  73. }
复制代码
配色是Github上Example以及用户issue里的配色方案,大家如果要用的话,可以参考:Material Skin 指南 中文翻译文档
看看效果:

MaterialSkin实现了很丰富的动画效果,But...

默认的蓝粉配色就已经很好看了,大家如果有什么酷炫帅气的配色方案,欢迎在评论区留言交流!
来源:https://www.cnblogs.com/BoiledYakult/archive/2023/06/28/17512479.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具