面向 .net 的跨平台 winforms · 开源 · 测试版(beta)

WinForms 进。跨平台出。

Majorsilence.Forms 是一个面向 .NET 的跨平台 WinForms 库——一个 Windows Forms 兼容层,把传统和现代的 WinForms 应用迁移到现代技术栈上。保留你已有的 Form、控件、事件处理程序和 *.Designer.cs 文件—— 运行在 Linux 上、 运行在 macOS 上,并以同一份构建运行在 Windows 上;移动端和 Web 也触手可及,可通过 Avalonia 自身的 Android、iOS 和 Browser 目标,或者通过 Uno Platform。七个宿主后端共享同一个控件模型——包括 Linux 上的 GTK 4 窗口、终端,以及让 Windows 应用逐个控件迁移的 WinForms 与 WPF 桥接。

Avalonia Uno Platform GTK 4 Terminal WinForms · WPF Headless SkiaSharp .NET 10
7
平台后端
Win · macOS · Linux
桌面端,开箱即用
iOS · Android · Wasm
可通过 Avalonia 或 Uno 到达
MIT
开源
为什么选择 majorsilence.forms

压缩的是迁移,不是你的代码库。

迁移一个 WinForms 应用,通常意味着在全新的 UI 范式里从头重写——XAML、MVVM、Web。 这既昂贵又有风险,还会丢掉多年来一直正常运作的业务逻辑和用户体验。 Majorsilence.Forms 镜像了 WinForms 的 API 表面,并提供一个兼容层,让你现有的窗体、控件和代码 以小得多的改动迁移过来。

复用,而不是重写

与你在 WinForms 中编写的相同的控件模型和事件驱动代码。没有 XAML,没有被迫的 MVVM 重写,不必重新学习框架。

从构造上就是跨平台

一切都用 SkiaSharp 绘制,运行在可替换的宿主后端之上——桌面默认使用 Avalonia,其自带的 Android/iOS/Browser 目标是通往移动端和 Web 的一条路径,Uno Platform 是另一条,Linux 上则有真正的 GTK 4 窗口。

逐个控件迁移

仅限 Windows 的 WinForms 和 WPF 后端把 Majorsilence.Forms 控件托管在你已经在交付的应用内部——ToWinFormsControl()、ToWpfElement()——支持 .NET 10 或 .NET Framework 4.8。逐块移植,然后换掉后端即可跨平台。

用 CSS 定制主题

一个小而完整记录的 CSS 子集设定每一个颜色和字体令牌,并按类型和状态为控件设置样式。在 Theme Studio 中实时编辑,并在混合应用中把同一份样式表应用到真正的 WinForms 或原生 Avalonia 控件上。

需要时再用 MVVM

Majorsilence.Forms.Mvvm 不借助反射就把 INotifyPropertyChanged 和 ICommand 接到控件上——裁剪和 AOT 安全,并能与 CommunityToolkit.Mvvm 和睦共处。可选启用,从不强制。

内核现代

GPU 加速的 Skia 渲染、HiDPI、触控手势、动画帧、当前版本的 .NET——外加 Majorsilence.Forms.Essentials,在每个平台上提供安全存储、文本转语音和打开链接。

可测试、可访问

一棵自动化树驱动进程内 UI 测试、面向 Selenium 的 W3C WebDriver 服务器、面向 AI 助手的 MCP 服务器、Windows 屏幕阅读器,以及浏览器中的 ARIA DOM 镜像。

异步对话框,无处不在

每个模态对话框都有一个异步孪生——ShowDialogAsync、MessageBox.ShowAsync——所以同一份代码也能在浏览器和手机上运行,那里不可能有阻塞式循环。随附的分析器会在你发布之前标出阻塞调用。

工作原理

一个控件模型,底下是可替换的宿主。

Majorsilence.Forms 拥有控件和渲染;后端只负责把像素放到屏幕上并传递输入。正是这条接缝(seam) 让同一个应用今天面向 Avalonia、明天面向 Uno——或者原封不动地跑在终端里。核心多目标支持 net8.0、 net10.0 和 netstandard2.0; WinForms 和 WPF 后端额外支持 net48,因此 .NET Framework 4.8 应用也能托管它。

Your app (Forms, controls, Designer files — the WinForms model you know) │ Majorsilence.Forms (controls + WinForms-compatible API, drawn with SkiaSharp) │ Swappable host backend ├─ Avalonia → Windows · macOS · Linux (default) · also Android · iOS · Browser ├─ Uno → desktop · iOS · Android · WebAssembly ├─ GTK 4 → Linux-first real GTK window (gir.core), also Windows/macOS with the GTK runtime ├─ Terminal → the form fills a terminal: Kitty graphics, Sixel, or Unicode block elements ├─ WinForms → Windows-only migration bridge: embed in an existing WinForms app, port in steps ├─ WPF → Windows-only migration bridge, same shape, for WPF apps └─ Headless → offscreen rendering for tests / CI
窗体看起来和你预期的一模一样

Program.cs,原封不动。

MainForm.cs
using Majorsilence.Forms;

public class MainForm : Form
{
}
Program.cs run
static void Main (string [] args)
{
    Application.Run (new MainForm ());
}
示例

真实的应用,而不是玩具演示。

浏览仓库中的每一个示例——一个 Windows Explorer 克隆、一个 Outlook 克隆、一个带有自己的 API 和数据库的客户端/服务器 POS 应用、同一个完整控件库 分别运行在桌面、Uno、GTK 4、浏览器、Android、iOS、WPF 和终端中、一个实时的 CSS Theme Studio、 双向的 WinForms 互操作,以及嵌入在宿主 Avalonia、Uno、GTK 4 和 WinForms 应用内部的 Majorsilence.Forms。

从这里开始

回答把你带到这里的那个问题。

大多数人来这里都是为了找一件具体的事——Windows Forms 能不能在 Linux 上运行、一个 WinForms 兼容层真正的代价是什么、或者它与用 MAUI 或 Avalonia 重写相比如何。每个问题都有自己的页面。

跨平台 WinForms 详解

为什么 System.Windows.Forms 只能在 Windows 上运行、绕过它的三种方式,以及一个 API 兼容的重新实现要放弃什么。

WinForms 能在 Linux 上运行吗?

原样不行——Mono 的移植早已不在,GDI+ 也不存在。在 Ubuntu、Fedora 和 Debian 上有什么可行的替代方案,以及如何发布。

WinForms 能在 macOS 上运行吗?

Apple Silicon 和 Intel 上的原生 NSWindow、它哪些地方不像 Mac,以及如何打包 .app。

迁移现有应用

majorsilence-migrate CLI 完成机械性的重写——命名空间、项目文件、资源——并以可读的 git diff 呈现。

WinForms 替代方案对比

MAUI、Avalonia、Uno Platform、Eto.Forms、WPF 和 Wine——以各自能保留多少你现有代码来衡量。

常见问题

设计器文件(Designer.cs)还能用吗?有可视化设计器吗?VB.NET、DataGridView、System.Drawing 和生产就绪情况又如何?