6 年磨一剑!纯 C# 全自研轻量 UI 引擎|内核 < 200KB + .NET8 AOT 跨平台
当前 PC 客户端开发大多基于 WinForms、WPF、Electron 或 Qt。绝大多数开发者选择在这些成熟框架之上做二次封装,但真正愿意从源头开始,全链路自研一套 UI 引擎的开发者少之又少。
这是我利用 6 年业余时间,历经无数次推翻重构,最终定型的纯 C# 用户态跨平台 UI 引擎。渲染管线、视图布局系统、动画调度、虚拟滚动、事件分发等核心模块全部自主实现,形成全链路闭环。
架构演进与核心设计
引擎经历了从 WinForms + GDI 到 GLFW + SkiaSharp 的演变,深度融合了 Android View 绘制流程、Jetpack Compose 函数式组合编程以及 Flutter 渲染优化理念。
与传统 XML 或重量级框架不同,本引擎坚持小而精的设计理念:
- 极简内核:单线程架构 + 对象复用机制,大幅降低 GC 压力;元素结构无冗余,内存占用极低。
- 函数式组合:状态驱动界面重组,组件树一次声明、多处复用。
- 原子化组件:只提供最基础的 Text、Input、Icon 等原子组件,复杂组件(DataGrid、图表)通过积木式组合实现。
- 原生渲染:全程无黑盒、无 Web 套壳、无浏览器内核,回归原生渲染本质。
核心亮点
- 纯 C# 用户态实现,Release 核心 DLL < 200KB
- 支持.NET8 AOT 原生发布,Windows / Ubuntu 已验证,macOS 理论 100% 支持
- 自研无 Timer 高性能动画系统 + 脏矩形局部刷新
- 百万级数据列表轻松稳定 60fps+
- 底层对接 Silk.NET.GLFW,渲染基于 SkiaSharp
代码示例与实战体验
采用函数式 API + 状态对象驱动界面重组,写法贴近 React 或 Flutter,现代前端开发者可快速上手。
ContentView(() => {
Column(() => {
var counterNum = StateValueOf(0);
// 响应式文本绑定
Text()
.H3()
.Binding(counterNum, (builder, num) => {
builder.TextValue($"计数器:{num}");
}, true);
// 无 Timer 循环动画
var visibleState = StateValueOf(true);
var animateValue = AnimateFloatOf(visibleState, animate => {
animate.Duration = 800;
animate.Times = int.MaxValue;
animate.Interpolator = XAnimationInterpolator.Uniform;
});
Icon(SvgResources.CircleProgress)
.Size(32)
.Binding(animateValue, (builder, value) => builder.Rotate(value * 360));
Text()
.PrimaryButton()
.Click(() => counterNum.Value++);
})
.Size(WRAP)
.Space();
});


