开源免费 · LGPL-2.1 · 活跃开发中
用 WinForms 的设计方式
用 WinForms 的设计方式
构建跨平台应用
Mufiy 是一个开源的 C# 跨平台 UI 框架。用你熟悉的原生 WinForms 设计器 + C# 编写界面,从单个共享代码库,一次开发即可部署到 Windows、Linux、macOS、Android、iOS 与 WebAssembly。
Program.cs
using Mufiy;
using Mufiy.Platform.Desktop.Provider;
namespace YourApp
{
internal static class Program
{
[STAThread]
static void Main()
{
MufiyApp.Create()
.AppConfiguration(option => {
// 图形后端:默认软件渲染,这里改为 OpenGL
option.GpuBackend = GpuBackendType.OpenGL;
})
.UseDesktopPlatform()
.RegisterTheme<Win10Theme>()
.UseMainWindow<Form1>()
.Build();
/* Here we go! */
MufiyApp.Run();
}
}
}
跨平台支持
一次编写,处处运行
Mufiy 基于 SDL3 跨平台窗体系统与 Skia 渲染引擎,把你的 .NET 应用带到所有主流平台(含国内信创 Linux 平台)。
Windows
10 / 11
稳定支持
Linux
glibc ≥ 2.28
稳定支持
macOS
10.15+
稳定支持
Android
API ≥ 24
稳定支持
iOS
12+
实验性支持
WebAssembly
浏览器直接运行
实验性支持
0稳定平台
0支持平台
0控件 / 组件
0公开枚举
0代码复用率
LGPL-2.1开源许可证
核心特性
为什么选择 Mufiy?
从设计器到部署,Mufiy 提供全链路的跨平台开发体验,而这一切都基于开源免费的理念。
WinForms 设计器 100% 兼容
与 WinForms 设计器完全兼容:在 Visual Studio 中拖拽式设计界面,所见即所得,控件、属性窗口与事件订阅习惯全部保留。
Skia 像素级渲染引擎
以 Skia 作为界面渲染器,精准控制界面上每一个像素点的绘制,创建精美且完全自定义的 UI 组件。
接入 Impeller 渲染引擎
通过预编译着色器(SkSL → SPIR-V)消除首次绘制卡顿,利用 Metal / Vulkan 后端降低 CPU 开销,动画与滚动更稳定流畅。进行中
SDL3 跨平台窗体
基于 SDL3 跨平台多媒体库,深度支持 Windows、macOS、Linux、iOS、Android 等主流操作系统与平台。
GPU 多后端硬件加速
支持 OpenGL、Vulkan、Direct3D 12 等多种 GPU 后端,为不同平台带来真正的硬件加速渲染体验。
全部标准 WinForms 控件
提供 WinForms 的全套标准控件:Button、Label、TextBox、DataGridView、ListView 等,开箱即用。
百万数据滑动不卡顿
列表类控件针对大数据量深度优化,百万级数据滑动操作依然流畅,满足企业级应用需求。
原生浏览器控件
基于平台原生内核的 WebView(CEF / WebKitGTK / 系统内核),在桌面应用中无缝嵌入 Web 内容,支持 OSR 离屏渲染。
自定义控件开发
支持用框架能力开发完全自定义的控件,利用 Skia 渲染器绘制独一无二的 UI 组件,并接入设计器与主题系统。
兼容 WinForms GDI 绘制
Graphics 绘制 API 对齐 System.Drawing.Graphics,你的 WinForms 自绘控件几乎无需修改即可迁移,复用既有控件资产。
SVG 渲染支持
原生支持 SvgImage 矢量图形渲染,让界面在任何分辨率与缩放下都保持清晰锐利。
现代 UI 样式能力
原生支持圆角(CornerRadius)、投影(DropShadow)、渐变、透明度、形状路径等现代界面样式,轻松构建现代化 UI。
支持 Native AOT 编译
完全支持 .NET Native AOT,应用启动更快、内存占用更低,可编译为单一原生可执行文件。
开源免费
框架完全开源免费,基于 LGPL-2.1 许可证。欢迎社区贡献,共同打造最好的 .NET 跨平台 UI 框架。
框架能力
不止是控件库
除控件之外,Mufiy 还提供声明式界面、主题、动画、绘制、实时渲染与平台扩展等完整能力,均在使用手册中有详细说明。
MXAML 声明式界面 实验性支持
MXAML 概览
用
.mxaml 声明界面,由源生成器在编译期翻译为 InitializeComponent,支持编辑器内实时预览与反向定位。布局能力
容器、定位与尺寸、StackPanel、GridPanel,覆盖常见界面排布需求。
数据绑定
{Binding} 标记扩展、绑定模式、回退值与集合绑定。资源、样式与触发器
资源字典、Style、属性触发器与数据触发器,样式集中管理。
RXAML 运行期加载
.rxaml 运行期加载与宿主控件,界面可动态下发。RXAML 热重载
开发期改完即见,缩短界面调试回路。
核心概念
主题系统
ColorSet、主题令牌与 UserOverride,支持亮暗主题、JSON / CSS 自定义主题与跟随系统切换。
动画系统
缓动函数、内置动画 API、关键帧动画与播放控制,另有 Hero 共享元素过渡(实验性)。
Graphics 绘制
绘制对象用法与能力清单,兼容 WinForms 自绘控件的迁移路径。
实时渲染层
每帧直绘的高性能渲染层,面向游戏、实时地图等高频刷新场景。
窗口(Window)
原生窗口、生命周期、显示关闭、外观装饰与窗口事件。
弹框与对话框
消息框、输入框、Toast、Snackbar 与跨平台文件对话框。
平台与系统能力
剪贴板
跨平台文本剪贴板读写,控件内置复制粘贴支持。
屏幕信息
多显示器枚举、主屏、工作区与缩放换算。
拖拽功能
把数据拖出到外部程序,也接收外部拖入的完整链路。
WebView 浏览器内核
CEF 与原生内核两个包的选择、各平台依赖与 OSR 离屏渲染差异。
实现窗体平台层
把 Mufiy 移植到框架尚未支持的窗口系统,自定义
IPlatform 与窗口宿主。实现浏览器内核包
把第三方浏览器内核封装成可直接安装的 NuGet 包。
实验性
MXAML / RXAML 声明式界面目前为实验性支持,正式项目建议继续使用 WinForms 设计器或 C# 代码编写界面;iOS 与 WebAssembly 平台已可正常构建运行,标注为实验性仅表示平台生态覆盖仍在完善,不影响开发使用。
GPU 渲染后端
硬件加速,全平台覆盖
Mufiy 支持多种 GPU 后端,为你的应用在不同平台带来真正的硬件加速体验。默认软件渲染,可通过 AppConfiguration 切换。
| 平台 | OpenGL | Vulkan | Direct3D 12 | Metal |
|---|---|---|---|---|
| Windows | ✓ 默认 | ✓ 支持 | ✓ 支持 | — |
| Linux | ✓ 默认 | ✓ 支持 | — | — |
| macOS | ✓ 默认 | — | — | ○ 后续支持 |
| Android | ✓ 默认 | ○ 后续支持 | — | — |
| iOS | ✓ 支持 | — | — | — |
| WebAssembly | ✓ 支持 | — | — | — |
代码示例
简洁如 WinForms,强大如原生
保留 WinForms 的开发体验,输出跨平台的原生应用。以下是项目模板生成的标准代码。
using Mufiy;
using Mufiy.Platform.Desktop.Provider;
namespace YourApp
{
/// <summary>应用程序入口</summary>
internal static class Program
{
/// <summary>应用程序主入口点。</summary>
[STAThread]
static void Main()
{
MufiyApp.Create()
.AppConfiguration(option => {
// 图形后端:使用 OpenGL。默认值是软件渲染
option.GpuBackend = GpuBackendType.OpenGL;
})
.UseDesktopPlatform()
.RegisterTheme<Win10Theme>()
.UseMainWindow<Form1>()
.Build();
/* Here we go! */
MufiyApp.Run();
}
}
}
using Mufiy;
using Mufiy.Controls;
using Mufiy.Drawing; // Color / Image / SvgImage / CornerRadius
namespace MyApp;
public partial class Form1 : Window
{
/// <summary>构造窗体并初始化界面</summary>
public Form1()
{
InitializeComponent();
}
/// <summary>按钮点击:弹出一个成功样式的提示</summary>
/// <param name="sender">事件源</param>
/// <param name="e">鼠标事件参数</param>
private void button1_Click(object sender, MouseEventArgs e)
{
Toast.Show(this, "Hello, Mufiy!", ToastType.Success);
}
}
namespace MyApp;
partial class Form1
{
/// <summary>设计器所需容器组件</summary>
private System.ComponentModel.IContainer components = null;
/// <summary>释放窗体使用的资源</summary>
/// <param name="disposing">true 表示释放托管资源</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
private Mufiy.Controls.Label label1;
private Mufiy.Controls.Button button1;
/// <summary>设计器生成的初始化代码,请勿手工修改</summary>
private void InitializeComponent()
{
label1 = new Mufiy.Controls.Label();
button1 = new Mufiy.Controls.Button();
SuspendLayout();
//
// label1
//
label1.FontName = "Arial";
label1.Location = new Point(243, 105);
label1.Name = "label1";
label1.Size = new Size(258, 49);
label1.TabIndex = 0;
label1.Text = "Hello World";
label1.TextAlign = ContentAlignment.MiddleCenter;
//
// button1
//
button1.FontName = "Arial";
button1.Location = new Point(243, 229);
button1.Name = "button1";
button1.Size = new Size(258, 91);
button1.TabIndex = 1;
button1.Text = "Hello";
button1.Click += button1_Click;
//
// Form1
//
BackColor = SystemColors.Control;
ClientSize = new Size(784, 561);
Controls.Add(button1);
Controls.Add(label1);
Name = "Form1";
Text = "Form1";
ResumeLayout(false);
}
}
发布 / 运行桌面应用时,请把目标框架选择为不带
-windows 后缀的跨平台 TFM(如 net10.0);-windows 仅用于让 Visual Studio 设计器正常工作。
技术架构
清晰的层次,强大的能力
Mufiy 采用五层架构,每一层各司其职,共同构建跨平台能力。
5API 层WinForms 设计器 API · 控件库 · GDI 兼容绘制
▲
4渲染层Skia 渲染引擎 · 像素级控制 · 正在接入 Impeller
▲
3GPU 后端OpenGL · Vulkan · Direct3D 12 · Metal
▲
2窗体系统SDL3 跨平台窗体 · 统一指针输入 · 窗口管理
▲
1平台层Win32 · Linux · Cocoa · Android · iOS · Wasm(可自行扩展)
使用手册
按主题查阅文档
完整的使用手册覆盖 58 个控件、84 个公开枚举,以及主题、动画、绘制、平台扩展等全部能力。