首页 > 其他分享 >Winform 巨好看的控件库推荐:MaterialSkin.2

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

时间:2023-06-28 20:37:39浏览次数:58  
标签:控件 ColorScheme materialSkinManager Accent Primary MaterialSkin.2 配色 MaterialSkin

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

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

Preview

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

......

Install

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

注意版本框架

工具箱可能不会显示 MaterialSkin 的控件,需要我们手动添加下:

工具箱 -> 右击:添加选项卡 -> 把 NuGet 安装包里的 DLL 文件拖到选项卡里
image

简单尝鲜

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

切换主题以及配色方案

在后台代码中添加一个只读的MaterialSkinManager变量,通过这个变量来控制主题和配色,把ReadMe.md给出的例程调整一下方便后续调整:

public partial class Form1 : MaterialForm
{
  private readonly MaterialSkinManager materialSkinManager;   
  public Form1()
  {
    InitializeComponent();

    materialSkinManager = MaterialSkinManager.Instance;	// 初始化 MaterialSkinManager 实例
    materialSkinManager.AddFormToManage(this);	// 将要应用 Material Design 的窗体添加到管理列表中
    materialSkinManager.Theme = MaterialSkinManager.Themes.LIGHT;	// Theme 属性用来设置整体的主题
    materialSkinManager.ColorScheme = new ColorScheme(Primary.BlueGrey800, Primary.BlueGrey900, Primary.BlueGrey500, Accent.LightBlue200, TextShade.WHITE);	// ColorScheme 属性来设置配色方案
  }
}

上面代码写完运行程序就会是我们配置的配色及主题:

image-20230628161255842

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

  • Themes主要是用来切换深色和浅色主题的,对应LIGHTDARK

  • ColorScheme主要是用来调整页面的配色方案的,它的构造函数提供了两种不同的重载形式,用于创建颜色方案:

    • public ColorScheme(Primary primary, Primary darkPrimary, Primary lightPrimary, Accent accent, TextShade textShade)
      

      这个构造函数接受 PrimaryAccent 枚举类型作为参数,用于指定主颜色和强调色。Primary 枚举包含一系列预定义的主颜色,而 Accent 枚举包含一系列预定义的强调色。此构造函数还接受 TextShade 枚举类型的参数,用于指定文本的明暗色调。通过使用这个构造函数,你可以轻松地选择 颜色方案的不同变体。[例程中使用的就是这个重载]

    • public ColorScheme(Color primary, Color darkPrimary, Color lightPrimary, Color accent, TextShade textShade)
      

      这个构造函数接受 Color 类型的参数,用于直接指定自定义的颜色。你可以传入具体的颜色对象作为参数,以定义主颜色、深色主颜色、浅色主颜色、强调色以及文本明暗色调。

    先看主题,创建一个改变主题的MaterialButton实现深色和浅色主题的切换了:

private void btn_ChangeTheme_Click(object sender, EventArgs e)
{
    materialSkinManager.Theme = materialSkinManager.Theme == MaterialSkinManager.Themes.DARK ? MaterialSkinManager.Themes.LIGHT : MaterialSkinManager.Themes.DARK;
}

再看配色方案,在此之前我们先在页面上随便加一些控件便于显示配色效果:

image-20230628193311837

更改配色方案:

private int colorSchemeIndex;   // 通过更换次数,方便循环更换颜色

private void btn_SwitchColor_Click(object sender, EventArgs e)
{
    colorSchemeIndex++;
    if (colorSchemeIndex == 6)
    {
        colorSchemeIndex = 0;
    }
    SwitchColor(colorSchemeIndex);
}

private void SwitchColor(int colorSchemeIndex)
{
    switch (colorSchemeIndex)
    {
        case 0:
            materialSkinManager.ColorScheme = new ColorScheme(
                materialSkinManager.Theme == MaterialSkinManager.Themes.DARK ? Primary.Teal500 : Primary.Indigo500,
                materialSkinManager.Theme == MaterialSkinManager.Themes.DARK ? Primary.Teal700 : Primary.Indigo700,
                materialSkinManager.Theme == MaterialSkinManager.Themes.DARK ? Primary.Teal200 : Primary.Indigo100,
                Accent.Pink200,
                TextShade.WHITE);
            break;
        case 1:
            materialSkinManager.ColorScheme = new ColorScheme(
                Primary.Green600,
                Primary.Green700,
                Primary.Green200,
                Accent.Red100,
                TextShade.WHITE);
            break;
        case 2:
            materialSkinManager.ColorScheme = new ColorScheme(
                Primary.BlueGrey800,
                Primary.BlueGrey900,
                Primary.BlueGrey500,
                Accent.LightBlue200,
                TextShade.WHITE);
            break;
        case 3:
            materialSkinManager.ColorScheme = new ColorScheme(
                Primary.Red800,
                Primary.Red900,
                Primary.Red500,
                Accent.Green200,
                TextShade.WHITE);
            break;
        case 4:
            materialSkinManager.ColorScheme = new ColorScheme(
                Primary.Yellow800,
                Primary.Yellow900,
                Primary.Yellow500,
                Accent.DeepOrange200,
                TextShade.WHITE);
            break;
        case 5:
            materialSkinManager.ColorScheme = new ColorScheme(
                Primary.DeepOrange800,
                Primary.DeepOrange900,
                Primary.DeepOrange500,
                Accent.Yellow200,
                TextShade.WHITE);
            break;
        case 6:
            materialSkinManager.ColorScheme = new ColorScheme(
                Primary.Lime800,
                Primary.Lime900,
                Primary.Lime500,
                Accent.Green200,
                TextShade.WHITE);
            break;
    }
    Invalidate(); // 重绘控件
}

配色是GithubExample以及用户issue里的配色方案,大家如果要用的话,可以参考:Material Skin 指南 中文翻译文档

看看效果:

show

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

默认的蓝粉配色就已经很好看了,大家如果有什么酷炫帅气的配色方案,欢迎在评论区留言交流!

标签:控件,ColorScheme,materialSkinManager,Accent,Primary,MaterialSkin.2,配色,MaterialSkin
From: https://www.cnblogs.com/BoiledYakult/p/17512479.html

相关文章

  • Winform DataGridView空间绘制单元格内容
    在项目中遇到一个需求,需将特定单元格内data显示为修饰后的内容,但不改变原始值(例如将data内的时间单位为ms,单元格需显示ms或者根据值显示特定名称)CellValueNeeded,该事件在控件刷新,需要为单元格填充数据时发生,其参数e返回当前单元格的行和列,根据行和列,获取需要的值,赋给e的Value属性......
  • 学习AdapterViewFlipper 图片、文字 轮播动画控件
    1\.问题/坑点1.1item宽高不生效问题需要注意的是,AdapterViewFlipper在布局时,宽高一定要用match_parent或者具体dp值。如果宽、高中使用了wrap_content时,会导致AdapterViewFlipper容器的宽高,最终变成第一个item的宽高。即使后续item的宽高超过第一个item,也不会生效,内容显......
  • ADO控件:显示数据(CListCtrl)
    //TODO:Addextrainitializationhere m_listLinkInfo.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT); inti=0; m_listLinkInfo.InsertColumn(i++,"ID", LVCFMT_LEFT,90); m_listLinkInfo.InsertColumn(i++,"Name", LVCFMT_LE......
  • SAP UI5 控件 ObjectStatus 的使用方法介绍试读版
    ObjectStatus控件是SAPUI5控件集合中一个极具视觉表现力的控件,用于在应用程序中显示实体(Object)的状态(Status)或属性信息。它可用于向用户提供重要的上下文状态信息,如成功、错误、警告、进行中(InProcess)等等。ObjectStatus控件通常与其他SAPUI5控件(如列表项、表格......
  • Pyqt5学习-01 控件通过qss设置样式
    #qss文件代码(QLabel样式)QLabel#notice{font-size:20px;color:gray;border:1pxsolidgray;border-radius:8px;}QLabel#notice[notice_level="normal"]{ color:green;border-color:green;}QLabel#notice[notice_level="......
  • 界面控件Telerik UI for WPF R2 2023——拥有全新的Windows 11精简主题
    TelerikUIforWPF拥有超过100个控件来创建美观、高性能的桌面应用程序,同时还能快速构建企业级办公WPF应用程序。TelerikUIforWPF支持MVVM、触摸等,创建的应用程序可靠且结构良好,非常容易维护,其直观的API将无缝地集成VisualStudio工具箱中。Telerik用户期待已久的R22023版本......
  • Android自定义控件
    继承现有控件类publicclassLeftButtonBarextendsLinearLayout{//默认实现的构造函数beginpublicLeftButtonBar(Contextcontext){super(context);}publicLeftButtonBar(Contextcontext,@NullableAttributeSetattrs){supe......
  • winform控件开发一之复合控件开发(6)切换按钮(Switch)
    使用自定义控件,实现一个切换按钮,显示效果如下: 通过双击实现切换操作实现代码如下:usingSystem.Drawing;usingSystem.Drawing.Drawing2D;usingSystem.Windows.Forms;namespace各种C_sharp功能测试{publicpartialclassSwitch:Control{public......
  • C# Winform通用开发框架,支持多语言,多数据库,自动更新,模块化
    C#Winform通用开发框架,支持多语言,多数据库,自动更新,模块化,可用其开发任意CS端系统,非常适合需要快速搭建项目的团队或个人使用。原创文章,转载请说明出处,资料来源:http://imgcs.cn/5c/661496079150.html......
  • 界面组件DevExpress WinForm v23.1新版亮点 - 皮肤矢量图标全新升级
    DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!DevExpressWinForm 控件日前正式发布了今年第一......