XchyUI:纯 C# 跨平台轻量级 UI 引擎
在桌面客户端开发领域,选择合适的基础框架至关重要。当前主流方案多基于 .NET 官方框架(WinForms/WPF/MAUI)、开源跨平台方案(Avalonia)或 Web 套壳技术(Electron/Tauri)。然而,对于追求极致性能与轻量化的场景,从源头构建一套全链路自研的 UI 引擎往往更具优势。
本文分享一款经过长期迭代、全链路自研的纯 C# 用户态跨平台 UI 引擎——XchyUI。它摒弃了浏览器内核与深度封装的黑盒机制,回归原生渲染本质,旨在提供极轻量、高性能的解决方案。
核心架构与设计理念
XchyUI 最终定型于 GLFW + SkiaSharp 组合,深度融合了业界三大核心思想:
- Android View 绘制流程:确保底层绘制的稳定性与兼容性。
- Jetpack Compose 函数式组合编程:采用声明式 UI 风格,简化状态管理。
- Flutter 渲染优化理念:借鉴其高效的渲染管线与布局算法。
与传统 XML 或重量级框架不同,本引擎坚持'小而精'的设计理念。只提供最基础的原子组件,所有复杂组件(如 DataGrid、TreeView、图表等)均通过基础组件积木式组合实现。这种设计避免了冗余臃肿,保持了核心的灵活性与可定制性。
关键特性
- 极简内核:Release 模式下核心 DLL 小于 200KB。
- 零依赖动画系统:自研无 Timer 高性能动画系统,避免主线程阻塞。
- 高效布局:支持 Row/Column/Flow 及虚拟滚动容器,百万级数据列表稳定运行在 60fps+。
- 内存优化:单线程架构配合对象复用机制,大幅降低 GC 压力;SKPaint/SKFont/SKBitmap 等底层对象全量池化复用。
- 跨平台支持:已验证 Windows / Ubuntu,macOS 理论支持率 100%。
- AOT 发布:支持 .NET8 AOT 原生编译,无需运行时环境即可部署。
代码示例与交互逻辑
XchyUI 采用函数式 API 结合状态驱动界面重组的模式。开发者只需关注业务逻辑与状态变化,UI 会自动响应更新。以下是一个包含计数器与旋转动画的示例:
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()
.Binding(animateValue, (builder, ) =>
builder.Rotate( * ));
Text()
.PrimaryButton()
.Click(() => counterNum.Value++);
})
.Size(WRAP)
.Space();
});


