Avalonia 是一个基于 .NET 的开源跨平台 UI 框架,核心目标是让开发者用 C# + XAML 写一套界面,就能运行在 Windows、macOS、Linux、iOS、Android 和 WebAssembly 上。 它常被视为“跨平台 WPF”,但在实现上并不依赖系统原生控件,而是通过自绘渲染保证各平台 UI 一致。
项目定位
Avalonia 最早由 Steven Kirk 于 2013 年启动,最初名为 Perspex,2016 年更名为 Avalonia,后进入 .NET Foundation。
它最适合做 桌面端软件、工控界面、数据看板、金融终端、医疗/工业设备 UI,移动端和 WebAssembly 目前仍在持续完善中。
核心特性
| 特性 | 说明 |
|---|---|
| 自绘渲染 | 默认使用 Skia/SkiaSharp 渲染,不依赖原生控件,跨平台外观高度一致 |
| XAML + C# | UI 用 .axaml 声明式编写,逻辑用 C# / F# 实现,WPF 开发者上手成本低 |
| MVVM 友好 | 内置数据绑定、命令、样式系统,可配合 CommunityToolkit.Mvvm、ReactiveUI 使用 |
| 多平台覆盖 | 桌面端最成熟,同时支持移动端、嵌入式 Linux 和 WebAssembly |
| Avalonia 12 升级 | 最低要求 .NET 8,推荐 .NET 10;Android/iOS 强制 .NET 10;统一 Skia 渲染路径 |
| 生态扩展 | 提供 Avalonia XPF、Avalonia Accelerate 商业方案,社区有 Ursa、SukiUI 等控件库 |
架构与渲染
Avalonia 的核心思路是:UI 逻辑层与平台渲染层分离。
它把窗口、控件、布局、动画抽象成逻辑树和可视化树,再通过平台抽象层交给 Skia 渲染。
Avalonia 12 已移除 Direct2D1 后端,统一走 Skia 路径,并正在与 Flutter 团队协作引入 Impeller 渲染引擎。
与常见框架对比
| 框架 | 优势 | 适合场景 |
|---|---|---|
| Avalonia | 桌面端强、自绘一致、工控/嵌入式强 | 桌面软件、工业终端、数据看板 |
| .NET MAUI | 微软官方、移动+Windows 生态好 | 企业移动应用、微软生态应用 |
| WPF | Windows 桌面成熟度高 | 仅面向 Windows 的传统桌面应用 |
| Flutter | 多端覆盖广、动画表现好 | 精品移动 App、跨端消费级应用 |
| Electron | 前端生态强、开发快 | Web 团队主导的桌面应用 |
快速上手
dotnet new install Avalonia.Templates
dotnet new avalonia.app -n MyAvaloniaApp
cd MyAvaloniaApp
dotnet run运行后会在当前系统上打开一个窗口。若使用 Visual Studio,可安装 Avalonia for Visual Studio 扩展;若使用 JetBrains Rider,XAML 预览和开发体验通常更稳定。
局限与注意事项
- AOT 支持仍不够完善,复杂项目可能需要额外兼容处理。
- 官方基础控件数量相对有限,复杂企业控件可考虑 Ursa 等社区库。
- 移动端不是主战场,生态和成熟度不如桌面端。
- Visual Studio 插件偶有稳定性问题,Rider 体验相对更好。
- Avalonia 12 不再支持 .NET Framework / .NET Standard 2.0,老项目迁移需评估。
生态动态
2026 年开源社区中,Avalonia 还出现过一次较受关注的讨论:独立开发者“布布”主导的 OpenHarmony.Avalonia 适配项目最终归档,引发了关于开源贡献、商业合作与开源伦理的讨论。但需要说明的是,Avalonia 官方目前并未正式支持鸿蒙平台。