纯 C# 全自研轻量 UI 引擎|内核 < 200KB + .NET8 AOT 跨平台
经过多年迭代与架构重构,这套纯 C# 用户态跨平台 UI 引擎最终定型为 GLFW + SkiaSharp 深度融合方案。其演进路径从 WinForms + GDI 起步,历经多次因性能、扩展性不足导致的彻底重构,最终沉淀出极轻量、高性能的渲染底座。
核心设计理念
当前 PC 客户端开发多基于 WinForms、WPF、Electron 或 Qt 等成熟框架。本引擎选择从 0 到 1 全链路自研,涵盖渲染管线、视图布局、动画调度、虚拟滚动及状态管理等模块,形成闭环。
- 极简高效:单线程架构配合对象复用机制,大幅降低 GC 压力;元素结构无冗余,内存占用极低。
- 函数式组合:思想贴近 React / Flutter / Jetpack Compose,组件树一次声明、多处复用,业务逻辑与 UI 结构高度内聚。
- 原生渲染:全程无黑盒、无 Web 套壳、无浏览器内核,直接对接底层 Skia 生成绘制指令并提交 GPU 执行。
- 积木式扩展:仅提供基础原子组件(Text/Input/Icon 等),复杂组件通过基础组件组合实现,保持灵活可定制。
关键特性
- Release 核心 DLL < 200KB
- 自研无 Timer 高性能动画系统
- 完整 View 布局系统:Row/Column/Flow/ 虚拟滚动容器
- 百万级数据列表稳定 60fps+
- 自研渲染管线 + 脏矩形局部刷新
- 底层对象池复用:SKPaint/SKFont/SKBitmap 全复用
- 支持 .NET8 AOT 原生发布
- 已验证 Windows / Ubuntu,macOS 理论 100% 支持
核心 API 示例
以下代码展示了响应式状态驱动界面重组的基本用法。注意 StateValueOf 用于管理状态,Binding 建立数据绑定,AnimateFloatOf 定义无需 Timer 的循环动画。
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.Delay = 200;
animate.Interpolator = XAnimationInterpolator.Uniform;
});
Icon(SvgResources.CircleProgress)
.Size(32)
.Binding(animateValue, (builder, ) => builder.Rotate( * ));
Text()
.PrimaryButton()
.Click(() => counterNum.Value++);
})
.Size(WRAP)
.Space();
});



