×

用 C# 和 XAML 写一次,iOS、Android、Windows、macOS、Web 全跑通

独孤求败 独孤求败 发表于2026-05-09 09:10:08 浏览42 评论0

抢沙发发表评论

Uno Platform 不是银弹,但它解决的是一个真实的问题:当你需要同时覆盖 iOS、Android、Web(WebAssembly)、Windows、macOS、Linux 这些平台的时候,如何用最小的人力成本维护一套代码。

它没有重新发明轮子,而是把已经被验证过的 WinUI 3 API 体系,完整地移植到了所有主流平台。这让大量已有的 WPF 和 UWP 开发经验、代码资产、社区生态,可以直接复用。

加上 Hot Design Agent、Figma 转代码、AI 开发助手这些新工具,以及 1.3 亿 NuGet 下载和数百家企业生产级使用的数据背书,Uno Platform 已经不是"试验项目"了——它是目前 .NET 生态里最完整的跨平台 UI 解决方案。

如果你有跨平台开发需求,特别是团队本身有 .NET / C# 开发能力,Uno Platform 值得认真评估。


最早的 Xamarin,解决了"能不能写 C# 同时跑在 iOS 和 Android 上"的问题,但 Web 这块一直不是它的长项。后来到了 .NET MAUI,思路转向了统一 API 层的方向,但 WebAssembly 支持始终处于"能用但不完善"的状态,实际做项目的时候还是会遇到各种限制。

真正把这件事做到了较高完成度的,是 Uno Platform


https://github.com/unoplatform/uno

它的核心思路非常清晰:复用 WinUI 3 的 API 体系,用 C# 和 XAML(或 C# Markup)写一套代码,编译出 iOS 应用、Android 应用、macOS 应用、Windows 应用、Linux 应用,以及 WebAssembly 应用。 这不是"一套代码能跑在多个平台"这种降级体验,而是一套代码生成的原生应用,跑在各个平台上各自是原生的性能和交互。

一个真实的数字

在深入技术细节之前,先看一组数据:

  • ~10,000

     GitHub Stars
  • 1.3 亿+

     NuGet 下载
  • 300+

     Contributors
  • Toyota、Microsoft 等企业在生产环境中使用

这个体量的开源项目,在 .NET 生态里是头部级别的。

它的核心逻辑是什么

要理解 Uno Platform,首先需要理解它的技术定位。

Uno Platform 并没有重新发明一套 UI 框架,而是把 WinUI 3 的 API 体系完整地移植了过来。这意味着:

  • WinUI 3 的所有控件(Button、ListView、NavigationView、DataGrid……)
  • WinUI 3 的样式系统(Fluent Design
  • WinUI 3 的 Composition API
  • WinUI 3 的动画和过渡效果

这些在 Windows 上跑的内容,在 iOS 上同样能跑,在 Android 上同样能跑,在 WebAssembly 上同样能跑。

开发者不需要学新的 UI API,直接用已经熟悉的 WinUI 3 写 C# 和 XAML,就能覆盖所有平台。对于已经有 WPF 或 UWP 开发经验的团队,上手 Uno Platform 的门槛相当低。

两种渲染方式,你选

这是 Uno Platform 设计得比较聪明的地方——它给了开发者两种渲染路径,而不是强制要求你接受其中一种。

第一种:Skia 渲染。

Skia 是一个跨平台的图形引擎,Uno Platform 用它做了一套统一的渲染路径。在 Windows 上,Skia 把 UI 画在 Win32 的窗口里;在 macOS 上,画在 AppKit 的窗口里(优先用 Metal 加速);在 Linux 上,可以走 X11 也可以直接写 Framebuffer;在 iOS 和 Android 上,同样可以通过 Skia 渲染出像素级一致的界面。

这种方式的好处是:所有平台的视觉效果完全一致,不会出现"Android 上圆角比 iOS 小一圈"这类问题。Skia 的性能也很好,硬件加速的。

第二种:原生渲染。

Uno Platform 也支持把 XAML UI 翻译成平台原生的控件。在 iOS 上生成 UIKit 的视图层级,在 Android 上生成 Android View 系统,在 Web 平台上通过 DOM API 渲染为浏览器原生的 HTML/CSS。

这种方式的好处是:每个平台看起来和用起来都像原生应用,自动获得系统级的一切:输入法、字体渲染、无障碍功能(VoiceOver、TalkBack)、原生滚动物理特效等。

更灵活的是,你可以在同一个应用里混合使用两种方式——有的页面用 Skia 保证视觉效果一致,有的页面用原生控件获得最佳平台适配。

图片

超过 500 个控件,开箱即用

这是 Uno Platform 非常实在的优势。

因为直接复用了 WinUI 3 的 API 体系,它天然支持:

  • 所有 WinUI 3 内置控件
  • Windows Community Toolkit 的所有扩展控件(含 DataGrid)
  • 任何为 WinUI 2/3 或 UWP 开发的第三方控件

简单来说:你在 WinUI 文档里看到的每一个控件,在 Uno Platform 里都能用,不需要移植,不需要找替代品。这个数字超过 500,来源是 WinUI 内置 + WCT + 第三方生态的累加。

Uno Platform 还有自己的 Uno Toolkit,提供针对多平台场景优化的高级控件,比如响应式布局专用组件。

主题系统也内置了三套:Fluent(WinUI 默认风格)、Material(Android 风格)、Cupertino(iOS 风格)。一套代码,切换主题适配不同平台的设计规范。

图片

Figma 设计稿,直接转 XAML

设计和开发之间的交接,一直是跨平台开发中最消耗时间的环节之一。

Uno Platform 的答案是:通过 Uno Platform Studio 的 Figma 插件,支持直接从 Figma 设计稿生成 XAML 或 C# Markup 代码。

设计师在 Figma 里画完,开发者在 Uno Platform 里一键导出,生成的代码结构清晰、性能良好、符合 Uno Platform 的最佳实践。

图片

AI 加持的开发体验

这是 2024 年之后 Uno Platform 重点发力的方向。

Hot Design Agent 是一个 AI 助手,它可以在应用运行时帮你构建 UI——你描述想要什么,它直接在运行中的应用帮你生成和调整界面。这相当于有一个 AI 设计助手在实时和你配合。

Uno MCP(Model Context Protocol) 则把 AI 能力集成进了开发环境。你在 VS Code 里写代码的时候,AI 可以直接感知你的项目结构、Uno Platform 的官方文档,给出精准的上下文建议——不是通用 AI 的泛泛而谈,而是真正懂你正在用的框架的回答。

这还不是最夸张的:App MCP 可以让 AI 直接控制运行中的应用,模拟鼠标点击、键盘输入、查询界面树。这为 AI agent 做 UI 测试和自动化操作提供了新的可能。

图片

单项目架构,不是"假"跨平台

很多跨平台框架声称的"单项目",其实是"一个业务逻辑项目 + 多个平台特定的项目"的结构,维护起来依然麻烦。

Uno Platform 的单项目是真正的单项目:

  • 一个 .csproj 文件
  • 一套 XAML 页面(或 C# Markup 声明式 UI)
  • 通过条件编译和平台特定 XAML 按需处理平台差异

配合 Uno Platform 的 Template Wizard(在线版本在 new.platform.uno/),你可以选择目标平台、.NET 版本、架构模式(MVVM 或 MVUX)、主题系统、需要的扩展包,甚至可以直接生成 GitHub Actions 或 Azure DevOps 的 CI 脚本。项目初始化到这一步基本就完成了。

Hot Reload,全平台生效

开发体验的另一个关键点是 Hot Reload。

Uno Platform 的 Hot Reload 支持在 XAML、C# Markup、纯 C# 三种模式下工作,范围覆盖绑定、x:Bind、资源文件、数据模板、样式——基本上改什么都行。

而且这个能力在所有目标平台上都生效:Windows、macOS、Linux、iOS、Android、WebAssembly。你在自己电脑上改 iOS 应用的界面,不需要重启模拟器,直接看到变化。

从 .NET 9 到 .NET 10,跟进速度很快

Uno Platform 和 .NET 的版本发布是锁步的——.NET 发版当天,Uno Platform 就能用上新版本的全部能力。这对于需要跟进 .NET 最新特性的团队来说,是非常实际的吸引力。

Uno Platform 已支持 .NET 9,并跟随 .NET 预览通道跟进 .NET 10 的进展。

怎么跑起来

Uno Platform 的环境配置有一个很贴心的工具:uno-check。运行一条命令,它自动检测你的开发机器缺少哪些 workload、哪些 SDK、哪些依赖项,一键帮你装好。

dotnet tool install --global uno-check
uno-check

项目创建推荐使用在线的 Template Wizard,可视化选择你要的平台和功能,比命令行更直观。

开发工具支持三种:Visual Studio(Windows)、JetBrains Rider、VS Code。你不需要为了用 Uno Platform 换 IDE。

图片

写在最后


群贤毕至

访客