HelloMicro.ELEControls
1.1.0
dotnet add package HelloMicro.ELEControls --version 1.1.0
NuGet\Install-Package HelloMicro.ELEControls -Version 1.1.0
<PackageReference Include="HelloMicro.ELEControls" Version="1.1.0" />
<PackageVersion Include="HelloMicro.ELEControls" Version="1.1.0" />
<PackageReference Include="HelloMicro.ELEControls" />
paket add HelloMicro.ELEControls --version 1.1.0
#r "nuget: HelloMicro.ELEControls, 1.1.0"
#:package HelloMicro.ELEControls@1.1.0
#addin nuget:?package=HelloMicro.ELEControls&version=1.1.0
#tool nuget:?package=HelloMicro.ELEControls&version=1.1.0
ELEControls
基于 Element UI Plus 设计体系的 WinForms 自定义组件库,采用纯 GDI+ 绘制,提供 123 个开箱即用的主题化控件,覆盖基础、表单、数据展示、导航、反馈、布局、图表、工业控制八大类。
免费开源 | .NET 8 | 纯 GDI+ | VS 设计器友好 | 12 套内置主题
特性
- Element UI Plus 风格 — 完整移植 Web 端设计令牌(色彩、圆角、间距、阴影)到桌面端
- 纯 GDI+ 渲染 — 不依赖第三方绘图库,双缓冲 + 抗锯齿,流畅无闪烁
- 主题系统 — 内置 12 套配色方案,支持运行时一键切换,可自定义扩展
- DPI 自适应 — 内置
ELEDPIScale缩放因子,高分屏下自动适配 - VS 设计器支持 — 所有控件均可在 Visual Studio 可视化设计器中拖放使用
- 统一命名空间 — 所有类型统一在
ELE.UI命名空间下,引用即用 - 工业控件 — 提供仪表盘、液位罐、风机、泵、阀门等 SCADA 级工控组件
环境要求
| 项目 | 要求 |
|---|---|
| 框架 | .NET 8.0 (net8.0-windows) |
| IDE | Visual Studio 2022 17.8+ |
| 系统 | Windows 10 / 11 |
| 许可 | MulanPSL-2.0 |
快速开始
1. 引用项目
将 src\ELEControls 项目添加到你的解决方案中,然后在 WinForms 项目里添加项目引用:
<ProjectReference Include="..\ELEControls\ELEControls.csproj" />
2. 引入命名空间
using ELE.UI;
3. 使用控件
代码方式:
var btn = new ELEButton
{
Text = "主要按钮",
Type = ELEComponentType.Primary,
Size = ELEComponentSize.Default,
Location = new Point(20, 20)
};
this.Controls.Add(btn);
设计器方式:
编译项目后,所有 ELE 控件会自动出现在 VS 工具箱的 ELEControls 分类中,直接拖放到窗体即可。
4. 切换主题
// 设置全局主题
ELEStyles.SetStyle(ELEStyle.Blue); // 内置主题
ELEStyles.SetStyle(ELEStyle.Dark); // 暗色主题
// 可选主题: Blue, Green, Red, Orange, Purple, Dark, Gray,
// Cyan, Pink, Brown, Black, White
项目结构
src/ELEControls/
├── Core/ # 核心基础
│ ├── ELEControl.cs # 主基类 (继承 Control)
│ ├── ELEUserControl.cs # 复合基类 (继承 UserControl)
│ ├── ELEEnums.cs # 枚举定义
│ ├── ELEGlobal.cs # 全局常量
│ └── IELEStyle.cs # 主题接口
├── Style/ # 主题样式
│ ├── ELEColor.cs # 颜色常量
│ ├── ELEBaseStyle.cs # 基础样式 (150+ 虚属性)
│ ├── ELEStyleColor.cs # 12 套主题实现
│ ├── ELEStyles.cs # 全局主题管理器
│ └── ELEDPIScale.cs # DPI 缩放
├── Common/ # 公共工具
│ └── ELEGDI.cs # GDI+ 扩展方法
├── Forms/ # 窗体
│ ├── ELEBaseForm.cs # 基础窗体 (自定义标题栏)
│ ├── ELEForm.cs # 标准窗体
│ ├── ELEMessageForm.cs # 消息弹窗
│ ├── ELEDialog.cs # 对话框
│ └── ELEDrawer.cs # 抽屉面板
└── Controls/ # 控件 (按分类)
├── Basic/ # 基础控件
├── Form/ # 表单控件
├── Data/ # 数据展示
├── Navigation/ # 导航控件
├── Feedback/ # 反馈控件
├── Layout/ # 布局容器
├── Chart/ # 图表控件
└── Industrial/ # 工业控件
组件一览
基础控件 (5)
| 控件 | 类名 | 说明 |
|---|---|---|
| 按钮 | ELEButton |
支持 Primary/Success/Warning/Danger/Info 五种语义类型,Round/Circle 形状 |
| 图片按钮 | ELEImageButton |
支持图标+文字组合按钮 |
| 标签 | ELELabel |
主题化文本标签 |
| 分割线 | ELELine |
水平/垂直分割线 |
| 链接 | ELELink |
主题化超链接文本 |
表单控件 (29)
| 控件 | 类名 | 说明 |
|---|---|---|
| 文本框 | ELETextBox |
带图标、清除按钮的输入框 |
| 多行文本 | ELETextArea |
多行输入框,支持字数统计 |
| 密码框 | ELEPasswordBox |
密码输入,支持显示/隐藏切换 |
| 搜索框 | ELESearchBox |
带搜索图标和清除按钮 |
| 数字文本框 | ELENumericTextBox |
支持格式验证的数字输入 |
| 数字输入 | ELEInputNumber |
带 +/- 按钮的数字调节器 |
| 复选框 | ELECheckBox |
主题化复选框 |
| 复选框组 | ELECheckBoxGroup |
复选框组容器 |
| 单选按钮 | ELERadioButton |
主题化单选按钮 |
| 单选组 | ELERadioGroup |
单选按钮组容器 |
| 开关 | ELESwitch |
滑动开关,支持自定义文字 |
| 下拉框 | ELEComboBox |
主题化下拉选择框 |
| 级联选择 | ELECascader |
多级联动选择器 |
| 树选择 | ELETreeSelect |
下拉树形选择器 |
| 日期选择 | ELEDatePicker |
日期选择器,带日历弹窗 |
| 时间选择 | ELETimePicker |
时间选择器 |
| 滑块 | ELETrackBar |
基础滑块 |
| 高级滑块 | ELESlider |
带刻度标记的滑块 |
| 范围滑块 | ELERangeSlider |
双滑块范围选择 |
| 评分 | ELERate |
星级评分 |
| 颜色选择 | ELEColorPicker |
颜色选择器 |
| 色轮 | ELEColorWheel |
HSV 色轮选色器 |
| 文件上传 | ELEUpload |
文件上传,支持拖放 |
| 自动补全 | ELEAutoComplete |
输入自动补全建议 |
| 标签输入 | ELETagInput |
标签式多值输入 |
| 提及输入 | ELEMention |
@提及输入框 |
| 分段器 | ELESegmented |
iOS 风格分段选择 |
| 虚拟键盘 | ELEKeyboard |
数字/全键盘虚拟键盘 |
| 富文本 | ELERichTextBox |
主题化富文本编辑器 |
数据展示控件 (29)
| 控件 | 类名 | 说明 |
|---|---|---|
| 标签 | ELETag |
语义标签,支持 Light/Dark/Plain 效果 |
| 徽章 | ELEBadge |
数字/圆点徽章 |
| 头像 | ELEAvatar |
图片/文字头像 |
| 卡片 | ELECard |
信息卡片容器 |
| 数据表格 | ELEDataGridView |
主题化数据网格 |
| 树视图 | ELETreeView |
主题化树形控件 |
| 列表框 | ELEListBox |
主题化列表选择 |
| 分页 | ELEPagination |
分页导航 |
| 进度条 | ELEProgressBar |
线性进度条 |
| 环形进度 | ELECircleProgressBar |
环形/仪表盘进度条 |
| 滚动条 | ELEScrollBar |
主题化滚动条 |
| 时间线 | ELETimeline |
垂直时间线 |
| 描述列表 | ELEDescriptions |
键值对描述列表 |
| 空状态 | ELEEmpty |
空数据占位提示 |
| 结果页 | ELEResult |
操作结果反馈页 |
| 统计值 | ELEStatistic |
数值统计展示 |
| 水印 | ELEWatermark |
页面水印覆盖 |
| 骨架屏 | ELESkeleton |
加载占位骨架 |
| 折叠面板 | ELECollapse |
手风琴折叠面板 |
| 穿梭框 | ELETransfer |
双列表穿梭选择 |
| 日历 | ELECalendar |
月份日历视图 |
| 图片 | ELEImage |
图片展示,支持 Fit 模式与预览 |
| 走马灯 | ELECarousel |
轮播图,支持自动播放 |
| 分割线 | ELEDivider |
带文字内容的分割线 |
| 滚动文字 | ELEScrollingText |
跑马灯文字效果 |
| 时钟 | ELEClock |
模拟时钟 |
| 倒计时 | ELECountDown |
倒计时计时器 |
| 无限滚动 | ELEInfiniteScroll |
滚动加载容器 |
| 虚拟滚动 | ELEVirtualScroll |
大数据虚拟列表 |
导航控件 (13)
| 控件 | 类名 | 说明 |
|---|---|---|
| 选项卡 | ELETabControl |
主题化选项卡 |
| 面包屑 | ELEBreadcrumb |
面包屑导航 |
| 导航菜单 | ELENavMenu |
侧边/顶部导航菜单 |
| 下拉菜单 | ELEDropdown |
下拉菜单,支持分割按钮 |
| 步骤条 | ELESteps |
步骤进度导航 |
| 工具栏 | ELEToolStrip |
主题化工具栏 |
| 菜单栏 | ELEMenuStrip |
主题化菜单栏 |
| 状态栏 | ELEStatusStrip |
主题化状态栏 |
| 右键菜单 | ELEContextMenuStrip |
主题化上下文菜单 |
| 页头 | ELEHeaderPanel |
带返回按钮的页面头部 |
| 回到顶部 | ELEBackTop |
浮动回到顶部按钮 |
| 锚点导航 | ELEAnchor |
锚点定位导航 |
| 小地图 | ELEMiniMap |
可滚动容器缩略导航 |
反馈控件 (7)
| 控件 | 类名 | 说明 |
|---|---|---|
| 提示 | ELEAlert |
内联警告/提示条 |
| 通知 | ELENotification |
桌面通知弹窗 (静态方法调用) |
| 加载 | ELELoading |
全屏/局部加载遮罩 |
| 消息条 | ELEMessageBar |
顶部消息提示条 |
| 气泡提示 | ELEPopover |
气泡卡片弹出层 |
| 文字提示 | ELEToolTip |
悬浮文字提示 |
| 固钉 | ELEAffix |
元素固定定位 |
布局控件 (14)
| 控件 | 类名 | 说明 |
|---|---|---|
| 面板 | ELEPanel |
基础面板容器 |
| 标题面板 | ELETitlePanel |
带标题的面板 |
| 分组框 | ELEGroupBox |
主题化分组框 |
| 主框架 | ELEMainFrame |
侧栏+顶栏+内容区布局 |
| 栅格行 | ELERow |
栅格系统行容器 |
| 间距容器 | ELESpace |
自动间距布局 |
| 布局容器 | ELEContainer |
Element 风格布局容器 |
| 页脚 | ELEFooter |
页面底部容器 |
| 侧栏 | ELEAside |
可折叠侧边栏 |
| 仪表盘 | ELEDashboard |
卡片网格仪表盘布局 |
| 分割面板 | ELESplitContainer |
主题化分割面板 |
| 流式布局 | ELEFlowLayoutPanel |
主题化流式布局 |
| 表格布局 | ELETableLayoutPanel |
主题化表格布局 |
| 分页容器 | ELEPage |
多页面切换容器 |
窗体 (5)
| 控件 | 类名 | 说明 |
|---|---|---|
| 基础窗体 | ELEBaseForm |
自定义标题栏窗体基类 |
| 标准窗体 | ELEForm |
通用主题窗体 |
| 消息窗体 | ELEMessageForm |
消息弹窗 (替代 MessageBox) |
| 对话框 | ELEDialog |
模态对话框 |
| 抽屉 | ELEDrawer |
侧滑抽屉面板 |
图表控件 (8)
| 控件 | 类名 | 说明 |
|---|---|---|
| 折线图 | ELELineChart |
多系列折线图,支持平滑曲线 |
| 柱状图 | ELEBarChart |
多系列柱状图,支持堆叠 |
| 饼图 | ELEPieChart |
饼图/环形图 |
| 面积图 | ELEAreaChart |
面积填充图 |
| 散点图 | ELEScatterChart |
散点图 |
| 雷达图 | ELERadarChart |
雷达/蛛网图 |
| 漏斗图 | ELEFunnelChart |
漏斗图 |
| 甘特图 | ELEGanttBar |
甘特图,支持滚动 |
工业控件 (13)
| 控件 | 类名 | 说明 |
|---|---|---|
| 仪表盘 | ELEMeter |
指针式仪表 |
| 高级仪表 | ELEGauge |
多段彩色仪表 |
| LED 标签 | ELELedLabel |
LED 数码管显示 |
| 管道 | ELEPipe |
工业管道,支持流向动画 |
| 阀门 | ELEValve |
工业阀门,开/关状态 |
| 温度计 | ELEThermometer |
温度计显示 |
| 波形图 | ELEWaveChart |
实时波形/趋势图 |
| 液位罐 | ELETank |
液位显示,带波纹动画 |
| 风机 | ELEFan |
旋转风机,带叶片动画 |
| 水泵 | ELEPump |
工业水泵,带叶轮动画 |
| 设备块 | ELEProcessDevice |
工艺流程设备块 |
| 信号灯 | ELESignalLight |
多色信号灯,支持闪烁 |
| 电池 | ELEBattery |
电池电量显示 |
色彩体系
ELEControls 完整移植了 Element UI Plus 的语义色彩系统:
| 语义 | 色值 | 用途 |
|---|---|---|
| Primary | #409EFF |
主操作、链接、选中态 |
| Success | #67C23A |
成功状态、确认操作 |
| Warning | #E6A23C |
警告信息、需要注意 |
| Danger | #F56C6C |
危险操作、错误状态 |
| Info | #909399 |
辅助信息、次要文本 |
每个主色调自动生成 16 级渐变色阶(Light-1 到 Light-9、Dark-2),用于悬停、按下、禁用等状态。
主题切换
内置主题
// 在应用启动时设置全局主题
ELEStyles.SetStyle(ELEStyle.Blue);
支持 12 套主题:Blue Green Red Orange Purple Dark Gray Cyan Pink Brown Black White
自定义主题
继承 ELEBaseStyle 覆盖颜色属性即可创建自定义主题:
public class MyCustomStyle : ELEBaseStyle
{
public override Color PrimaryColor => ColorTranslator.FromHtml("#6366F1");
public override Color SuccessColor => ColorTranslator.FromHtml("#22C55E");
// 覆盖需要自定义的属性 (共 150+ 可覆盖属性)
}
// 应用自定义主题
ELEStyles.SetStyle(new MyCustomStyle());
渲染架构
所有控件采用模板方法模式渲染管线,继承自 ELEControl 或 ELEUserControl:
OnPaint
├── OnPaintFill() → 填充背景
├── OnPaintRect() → 绘制边框
└── OnPaintFore() → 绘制前景内容
自定义控件只需继承基类并覆盖对应方法:
public class MyControl : ELEControl
{
protected override void OnPaintFill(Graphics g, GraphicsPath path)
{
// 自定义背景绘制
}
protected override void OnPaintFore(Graphics g, GraphicsPath path)
{
// 自定义前景绘制
}
}
状态管理
控件自动管理以下交互状态,每种状态对应独立的颜色组(FillColor / RectColor / ForeColor):
| 状态 | 说明 |
|---|---|
| Normal | 默认状态 |
| Hover | 鼠标悬停 |
| Press | 鼠标按下 |
| Selected | 选中状态 |
| Disabled | 禁用状态 |
| ReadOnly | 只读状态 |
| Focused | 获得焦点 |
枚举类型参考
ELEComponentType — 语义类型
Default | Primary | Success | Warning | Danger | Info
ELEComponentSize — 组件尺寸
Large (40px) | Default (32px) | Small (24px)
ELEButtonShape — 按钮形状
Default | Round | Circle
ELEPlacement — 弹出位置
Top | TopStart | TopEnd | Bottom | BottomStart | BottomEnd
Left | LeftStart | LeftEnd | Right | RightStart | RightEnd
ELEDirection — 方向
Up | Down | Left | Right
使用示例
主题按钮组
var btnPrimary = new ELEButton { Text = "主要", Type = ELEComponentType.Primary };
var btnSuccess = new ELEButton { Text = "成功", Type = ELEComponentType.Success };
var btnWarning = new ELEButton { Text = "警告", Type = ELEComponentType.Warning };
var btnDanger = new ELEButton { Text = "危险", Type = ELEComponentType.Danger };
var btnInfo = new ELEButton { Text = "信息", Type = ELEComponentType.Info };
表单输入
var txtName = new ELETextBox
{
PlaceholderText = "请输入姓名",
Size = ELEComponentSize.Default,
Width = 240
};
var cboCity = new ELEComboBox
{
PlaceholderText = "请选择城市",
Size = ELEComponentSize.Default
};
cboCity.Items.AddRange(new[] { "北京", "上海", "广州", "深圳" });
数据表格
var grid = new ELEDataGridView
{
Dock = DockStyle.Fill,
ShowCheckBoxes = true
};
grid.Columns.Add("Name", "姓名");
grid.Columns.Add("Age", "年龄");
grid.Rows.Add("张三", 28);
消息通知
// 顶部消息条
ELEMessageBar.Show("操作成功!", ELEComponentType.Success);
// 右下角通知
ELENotification.Show("系统通知", "您有新的消息,请及时查看。");
// 模态消息框
ELEMessageForm.Show("确定删除?", "提示", MessageBoxButtons.YesNo);
图表
var chart = new ELELineChart { Dock = DockStyle.Fill };
chart.Series.Add(new ELEChartSeries
{
Name = "销售额",
Data = new List<double> { 120, 200, 150, 80, 70, 110, 130 }
});
chart.Categories = new List<string>
{
"周一", "周二", "周三", "周四", "周五", "周六", "周日"
};
工业控件
// 仪表盘
var meter = new ELEMeter
{
Value = 75.5,
MinValue = 0,
MaxValue = 100,
Unit = "℃"
};
// 液位罐
var tank = new ELETank
{
Value = 65,
MaxValue = 100,
ShowWave = true
};
// 阀门
var valve = new ELEValve
{
IsOpen = true,
Direction = ELEDirection.Right
};
构建
dotnet build src\ELEControls\ELEControls.csproj -c Release
输出程序集位于 src\ELEControls\bin\Release\net8.0-windows\ELEControls.dll。
NuGet 包
本项目已发布到 NuGet,你可以直接通过 NuGet 包管理器安装:
安装方式
Package Manager:
Install-Package ELEControls
.NET CLI:
dotnet add package ELEControls
PackageReference:
<PackageReference Include="ELEControls" Version="1.0.0" />
发布 NuGet 包
如果你想自己构建和发布 NuGet 包,请参考 NuGet 发布指南
快速开始:
# 获取 API Key 后,一行命令完成发布
.\nuget-publish.ps1 -ApiKey "your-api-key"
许可证
本项目基于 木兰宽松许可证 第2版 (MulanPSL-2.0) 开源。
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0-windows7.0 is compatible. net9.0-windows was computed. net10.0-windows was computed. |
| .NET Framework | net48 is compatible. net481 was computed. |
-
.NETFramework 4.8
- No dependencies.
-
net8.0-windows7.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
v1.1.0: Added .NET Framework 4.8 support