大家好,我是刚子。

不知道你有没有遇到过这种情况:吭哧吭哧用 WPF 写了个桌面应用,跑在 Windows 上还挺溜,结果老板来一句——“客户那边用的是 Mac,还有一堆 Linux 服务器,你这软件能不能也跑一下?”

这时候你就得面对一个扎心的事实:WPF 只认 Windows

那咋办?用 Qt?得学 C++,成本太高。用 Electron?包体几百兆起步,内存占用分分钟上 G。用 MAUI?跨平台方案还不错,但 Linux 和 WebAssembly 支持还在路上。

今天刚子就给兄弟们推荐一个能解决上述痛点的框架:Avalonia UI

一、Avalonia UI 是什么?

Avalonia UI 是一个开源的、跨平台的 .NET UI 框架,支持使用 C# 和 XAML 构建桌面、移动和 Web 应用。

这个项目是 2013 年由开发者 Steven Kirk 创建的,最初的想法很简单:把 WPF 作为一个开源、跨平台的项目重新实现一遍

那时候 WPF 已经被微软冷落了好几年,社区里很多人都觉得可惜——WPF 的 XAML 设计体验和数据绑定机制在当时是超前的,但它只能跑在 Windows 上。

于是 Steven 决定自己动手,Avalonia 就这样诞生了。

经过十几年的发展,Avalonia 已经从一个“WPF 的 Linux 移植版”,成长为独立的、功能完备的跨平台 UI 框架。项目从 2021 年开始受到广泛关注,采用率显著增长。

二、为什么要选 Avalonia UI?

1. 一套代码,跑遍全平台

Avalonia 支持 Windows、macOS、Linux、iOS、Android,甚至 WebAssembly(浏览器)。

这意味着你可以在 Visual Studio 里写完界面和逻辑,然后发布到 6 个不同平台。不用重写,不用适配,一套代码搞定。

2. UI 100% 自绘,跨平台像素级一致

Avalonia 跟 MAUI、Uno 最大的不同在于渲染策略。

MAUI 和 Uno 走的是“原生控件映射”路线:在 Windows 上用 WinUI,在 Mac 上用 Cocoa,在 Android 上用原生控件……每个平台长啥样就是啥样,跨平台一致性很难保证。

Avalonia 则完全不同:它使用 Skia 图形引擎 进行自绘渲染,跟 Flutter 和 Chrome 用的是同一套底层技术。UI 代码在每个平台上的视觉效果几乎完全一致,控件外观、布局、动画都保持统一。有评测显示,Avalonia 跨平台 UI 一致性可以做到 95% 以上。

而且 Skia 支持 GPU 硬件加速,复杂界面的性能表现非常好。Avalonia 官方宣称,Avalonia 12.0 在包含 35 万个独立视觉元素的复杂布局上,FPS(帧率)提升了最高 1867%

3. WPF 开发者无缝迁移

如果你熟悉 WPF,上手 Avalonia 会非常快。它同样使用 XAML 定义界面(扩展名是 .axaml),同样支持 MVVM 模式,同样有强大的数据绑定系统。控件、布局、样式这些概念都跟 WPF 相似,学习成本很低。

如果你手里有现成的 WPF 项目想迁移到跨平台,Avalonia 还提供了一个叫 XPF 的商业解决方案,可以让现有 WPF 应用不改代码直接跑在 macOS 和 Linux 上。

4. 社区活跃,大厂背书

Avalonia 现在由微软与 Uno Platform 共同维护,而且 JetBrains 在官方博客中专门推介过 Avalonia 的生态工具。全球已有 450K+ 的组织在使用,550K+ 的项目活跃依赖它,社区的活跃度和生态成熟度都很高。

三、Avalonia 的核心架构

渲染引擎:Skia → Impeller

Avalonia 默认使用 SkiaSharp(Google Skia 的 .NET 封装)作为渲染后端。

最近 Avalonia 还和 Google Flutter 团队合作,正在将下一代渲染引擎 Impeller 引入框架。Impeller 是一种 GPU 优先的渲染方案,能进一步减少渲染卡顿,提升动画流畅度。

简单理解:Skia 保证现在够用,Impeller 让未来更丝滑。

XAML(axaml):声明式 UI

Avalonia 使用 XAML 定义界面,但它的 XAML 文件扩展名是 .axaml,跟 WPF 的 .xaml 区分开。

跟 WPF 的区别在于:Avalonia 的 XAML 是真正跨平台的,所有控件都经过重新设计,不依赖 Windows 底层。

MVVM 与数据绑定

Avalonia 天然支持 MVVM 模式,通过数据绑定将 UI 和业务逻辑分离。你可以用传统的 INotifyPropertyChanged,也可以用社区主推的 ReactiveUI 框架,让响应式编程更优雅。

四、Avalonia vs MAUI vs Uno Platform

刚子整理了一个对比表格,帮你快速看清这三者的区别:

对比维度 Avalonia UI .NET MAUI Uno Platform
渲染策略 Skia 自绘,跨平台一致性强 原生控件映射,各平台各长各的样 混合模式(自绘 + 原生)
平台支持 Win/macOS/Linux/Android/iOS/WASM Win/Android/iOS/macOS(Linux/WASM 较薄弱) 全平台(含 WASM)
WPF 迁移成本 低,XAML 风格类似 中,需要学习新概念 中,兼容 UWP/WinUI
性能表现 GPU 加速,复杂场景下 FPS 领先 原生控件,性能尚可 介于两者之间
社区生态 活跃,450K+ 组织使用 微软官方支持,但迭代较慢 活跃,专注 WinUI 兼容
适用场景 新项目 + WPF 跨平台迁移 移动端优先,需要原生外观 从 UWP/WinUI 迁移到多平台

五、快速入门:5 分钟跑起来

  1. 安装模板
dotnet new install Avalonia.Templates
  1. 创建项目
dotnet new avalonia.app -n MyAvaloniaApp
cd MyAvaloniaApp
  1. 运行
dotnet run

你应该会看到一个窗口弹出来,显示 "Welcome to Avalonia!"

IDE 建议

  • Visual Studio 2022:安装 "Avalonia for Visual Studio" 扩展
  • JetBrains Rider:原生支持 Avalonia,体验最佳
  • VS Code:安装 Avalonia 扩展

划重点:第一次运行可能会有点慢,因为要下载依赖包。耐心等一下,之后就好了。

六、场景分析:Avalonia 适合谁?

场景 推荐度
需要一套代码跑 Windows + Mac + Linux 桌面 ⭐⭐⭐⭐⭐
现有 WPF 项目想迁移到跨平台 ⭐⭐⭐⭐⭐
需要高 UI 一致性(控件自绘,不受系统主题干扰) ⭐⭐⭐⭐⭐
主攻移动端(iOS/Android),不介意原生外观差异 ⭐⭐⭐(可选 MAUI)
需要 WebAssembly 版本跑在浏览器里 ⭐⭐⭐⭐

结语:Avalonia 可能不是你听说过的第一个 .NET 跨平台框架,但它绝对是现在最好用的之一。如果你正在为跨平台桌面开发选型发愁,不妨花一个下午试试 Avalonia——大概率你会跟刚子一样,喊出那句“真香”。

如果你觉得这篇文章有用,点个赞、转给还在被跨平台桌面开发折磨的兄弟

我是刚子,一个还在写 .NET 的程序员。咱们下回见!