SunnyUI V3.9.7:给 WinForm 换一套现代皮肤

2026-05-15 27 预计阅读时间:1 分钟
来源:oschina.net AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:7 分钟

WinForm 开发者最头疼的事之一,就是默认控件看起来像从 Windows XP 时代穿越过来的。SunnyUI 是一个国产开源 WinForm 控件库,提供了几十个风格统一的现代控件,直接替换原生控件就能让界面焕然一新。V3.9.7 版本近期发布,继续在细节和文档上打磨。

为什么选 SunnyUI 而不是自己画

自己用 GDI+ 重绘控件是一条路,但代价不小——每个控件都要处理鼠标状态、焦点、字体适配、高 DPI 缩放,工作量很快失控。SunnyUI 把这些脏活包了:

  • 控件数量充足:按钮、输入框、下拉框、表格、图表、导航栏、进度条、开关、分页等超过 60 种,覆盖常见业务场景。
  • 风格统一:所有控件遵循同一套配色和圆角规范,不用操心"这个按钮和那个面板风格不搭"。
  • 主题切换:内置多套颜色主题,一行代码切换深色/浅色模式。
  • 中文友好:文档、示例、注释都以中文为主,社区在 Gitee 活跃。

快速上手:从零搭建一个 SunnyUI 窗体

最直接的方式是通过 NuGet 安装。创建一个 WinForm 项目后,执行:

# 在项目目录下安装 SunnyUI
dotnet add package SunnyUI

或者用 Visual Studio 的 NuGet 包管理器搜索 SunnyUI 安装。

安装完成后,修改主窗体继承自 UIForm,这是最关键的一步:

using SunnyUI;

// 把默认的 Form 替换为 UIForm
public class MainForm : UIForm
{
    public MainForm()
    {
        Text = "SunnyUI 示例";
        Width = 800;
        Height = 600;

        // 添加一个带图标和样式的主按钮
        UIBtnMain btnSave = new UIBtnMain
        {
            Text = "保存数据",
            Location = new System.Drawing.Point(30, 30),
            Size = new System.Drawing.Size(150, 40)
        };
        btnSave.Click += BtnSave_Click;

        // 添加一个带搜索提示的输入框
        UITextBox txtSearch = new UITextBox
        {
            Watermark = "输入关键词搜索...",
            Location = new System.Drawing.Point(30, 90),
            Size = new System.Drawing.Size(250, 35)
        };

        // 添加一个开关控件
        UISwitch switchEnable = new UISwitch
        {
            Active = true,
            Location = new System.Drawing.Point(30, 140),
            Size = new System.Drawing.Size(70, 30)
        };

        // 添加分页控件
        UIPager pager = new UIPager
        {
            Location = new System.Drawing.Point(30, 200),
            PageSize = 20,
            RecordCount = 200,
            PageIndex = 1
        };
        pager.PageChanged += Pager_PageChanged;

        Controls.AddRange(new Control[] { btnSave, txtSearch, switchEnable, pager });
    }

    private void BtnSave_Click(object sender, EventArgs e)
    {
        UIMessageBox.ShowSuccess("保存成功!");
    }

    private void Pager_PageChanged(object sender, EventArgs e)
    {
        var pager = sender as UIPager;
        Console.WriteLine($"当前页: {pager.PageIndex}");
    }
}

几个值得注意的点:

  • UIForm 自带标题栏样式和侧边导航支持,不需要手动重绘窗口边框。
  • UIBtnMain 是主操作按钮,有强调色背景;次要操作用 UIBtnMinor
  • UITextBoxWatermark 属性直接支持水印提示文字,不用额外画。
  • UIMessageBox 替代原生 MessageBox,风格与整体一致。

主题与配色:一行代码换肤

SunnyUI 内置了多套主题风格,切换方式简单粗暴:

// 在 UIForm 初始化后切换主题
// 可选值参考 SunnyUI.Enums.UIStyle 枚举
this.Style = UIStyle.Dark;       // 深色主题
// this.Style = UIStyle.Blue;    // 蓝色经典
// this.Style = UIStyle.Colorful; // 多彩风格

如果需要自定义品牌色,可以修改全局配色参数:

// 自定义主色调(十六进制 ARGB)
UIStyles.SetStyleColor(UIStyle.Blue, Color.FromArgb(0xFF, 0x2D, 0x8C, 0CF));

所有控件会自动跟随当前主题色渲染,不需要逐个控件设置。

V3.9.7 更新关注点

根据项目更新日志页面(Gitee Wiki),V3.9.7 的迭代集中在:

  • 控件细节修复:若干控件在特定 DPI 和字体设置下的渲染偏差被修正。
  • 文档完善:帮助文档持续补充,Wiki 页面覆盖了大部分控件的属性说明和用法示例。作者特别提到评论功能缺少查找能力,建议有问题直接提 Issue 或到博客留言,比在文档评论区更高效。
  • NuGet 同步:包版本与源码版本保持一致,直接 dotnet add package SunnyUI 即可拿到最新版。

完整更新日志在 Gitee Wiki 的"更新日志"页面,每次版本变更都有逐条记录。

选用建议与边界

SunnyUI 适合以下场景:

  • 内部工具 / 管理后台:快速出界面,风格统一,不需要请设计师。
  • 工控 / 设备上位机:WinForm 在工业领域仍是主流,SunnyUI 的表格、图表、分页控件直接可用。
  • 中小型桌面应用:不想在 UI 渲染上投入太多精力时,它是性价比最高的选择。

需要注意的边界:

  • 高定制化需求:如果你的界面需要大量非标准布局、动画、3D 渲染,WPF 或 Avalonia 的灵活性更高。
  • 跨平台:SunnyUI 绑定 WinForm,只跑在 Windows 上。需要 Linux/macOS 支持时,看 Avalonia 或 MAUI。
  • 版本兼容:SunnyUI 支持 .NET Framework 4.0+ 和 .NET 6/8,但部分新控件在高版本框架下表现更好,建议用 .NET 6 以上开发。

上手清单

  1. dotnet add package SunnyUI 安装包。
  2. 主窗体继承 UIForm,替换默认 Form
  3. UIXxx 系列控件替代原生控件,从按钮和输入框开始。
  4. 通过 this.Style = UIStyle.Dark 选一个主题。
  5. 遇到问题查 Gitee Wiki,或直接提 Issue。

相关推荐