多年來,基於 xaml 的 ui 框架已經有了很大的發展,下面的圖表是最好的說明。這些框架主要包含:支持跨平台應用的 avalonia ui, uno platform 和 .net maui。事實上,除了 avalonia ui 之外,對跨平台 xaml 的需求是其發展的主要驅動力。如果微軟早點推出一個類似 flutter 這樣的跨平台 ui 框架,我們可能就不會有這麼多的選擇。這樣有利有弊:好處在於我們有很多跨平台方案可以選擇,壞處在於不同的框架有不同的對象模型以及各自的特有的 xaml 語法(dialect of xaml)。
在關注各種 .net ui 框架時,我們會提出同一個問題:應該使用哪一個 xaml ui 框架來開發我們的應用?這是一個合理且重要的問題。迄今為止還沒有一個明確的答案。但是,對於每個具體的應用,這個問題很容易回答,因為可以針對特定的應用需求比較分析每一種框架的優點和缺點。通過概述基於 xaml 的主要 ui 框架的優點和缺點,本文檔旨在幫助公司和開發人員回答以下問題:
應該選擇哪一個 xaml 框架開發我的跨平台應用?
高屋建瓴地看,可以從架構上描述這些基於 xaml 的跨平台 ui 框架的差異。這些框架都是基於相同的 .net(以前的 mono)工具。不容忽視的是,xamarin 對 .net 的貢獻使得這些框架存在。此外,在 .net 6+ 中,這些框架在每個平台上都使用相同的運行時和核心庫。
- Avalonia UI : 完全自己呈现控件和用户界面元素,这一点和 Flutter 相同。
- .NET MAUI : 标准化一组名称、属性、事件,并将它们应用/链接到特定平台的原生控件。如果单个平台不支持某项功能,该功能则不会出现在所有平台的 MAUI 中(不涉及特定平台的代码)
- Uno Platform : 使用选定的几个特定于平台的基本元素来构建和渲染控件。 对于高级控件,这提供了近乎像素完美的结果。这意味着 Uno Platform 像 Avalonia UI 和 Flutter 那样完全渲染控件; 不过, 它还支持直接嵌入特定平台的原生控件,是一个混合架构。
因为 WPF 和 UWP/WinUI 这些基于 XAML 的微软框架不是跨平台的,所以这里不进行详细比较。但是 WPF 可以通过Wine Mono 或者 Avalonia XPF跨平台运行。WinUI/UWP 已通过接下来讨论的 Uno Platform 支持跨平台运行。
項目連結
| Project | Website | GitHub | Docs |
|---|---|---|---|
| Avalonia UI | avaloniaui.net | github.com/AvaloniaUI/Avalonia | docs.avaloniaui.net |
| .NET MAUI | maui | github.com/dotnet/maui | docs.microsoft.com/en-us/dotnet/maui/ |
| Uno Platform | platform.uno | github.com/unoplatform/uno | platform.uno/docs/ |
其他框架
還有一些其他可用於 .net 跨平台開發的解決方案在本文不再詳細描述。即便本文不會進行詳細對比,這些框架或者解決方案也值得了解一下:
- WPF : 正如上文所讲,WPF 可以通过Wine Mono 或者 Avalonia XPF跨平台运行。对于 WPF 代码量较大的现有应用,可以考虑这种跨平台解决方案。
- Eto.Forms : 一个类似于 .NET MAUI 的 UI 框架,使用平台原生控件构建 UI,XAML 也可以用于序列化和构造 UI。
- Noesis GUI : 用于游戏开发, Noesis GUI 重新创建 WPF,用于游戏引擎(如 Unity)以构建用户界面。Noesis GUI 对 XAML 的支持非常广泛,可以和 Microsoft Blend 一起使用。 如果它可以在游戏引擎之外工作,并且对较小的应用程序有更好的许可,那么它将是一项早于其他跨平台 XAML 实现的有趣技术。
- .NET MAUI + Blazor Hybrid : .NET MAUI 可以托管 Blazor Web 应用(在 BlazorWebView 控件内),使其更像是应用程序和服务容器。对于那些希望将现有 Web 应用程序重新打包并分发为移动应用程序的人来说,这是一个非常有吸引力的选择。
- .NET MAUI + Avalonia UI Hybrid : .NET MAUI 还可以托管 Avalonia UI(在 AvaloniaView 控件里),使其更像是一个应用程序和服务的容器。 由于 Avalonia 只是一个 UI 框架,要轻松获取 .NET MAUI 的所有附加平台抽象功能 (Essentials) 以及更轻松地打包和部署移动应用时,这是一个非常有吸引力的选择。
更多時候將 .net maui 作為應用程式加服務容器,然後託管其他 ui 框架(如 blazor 或 avalonia ui)是一個有吸引力的選擇。這種架構可能會在未來獲得更多的關注,絕對是一個值得密切關注的領域。
框架對比
每個框架都有不同的表現--在某些地方很明顯。下表中重點關注具有較高影響力的領域和特徵。對於所有框架表象相同的地方將不在下表中呈現(僅關注差異)。
這種比較是基於對各種框架的大量研究和經驗;結果不免有些主觀,還需要注意的是,. net maui 的使用經驗是三個選項中最少的,這可能會影響排名的準確性。
- ✔️表示支持該特性 ❌ 表示不支持
- ⭐⭐⭐ 是最高/最好的評分, ⭐ 是最低/最差的
| Avalonia | .NET MAUI | Uno Platform | |
|---|---|---|---|
| ▶ 特性 | |||
| mvvm 模式 | ✔️ | ⭐⭐⭐ | ✔️ | ⭐⭐ | ✔️ | ⭐⭐⭐ |
| mvu 模式 | ❌ | ✔️ | ⭐⭐ | ✔️ | ⭐ |
| Pixel-perfect rendering | ✔️ | ⭐⭐⭐ | ❌ | ✔️ | ⭐⭐ |
| 控制項 | ✔️ | ⭐⭐⭐ | ❌ | ✔️ | ⭐⭐⭐ |
| 樣式和主題 | ✔️ | ⭐⭐⭐ | ✔️ | ⭐ | ✔️ | ⭐⭐⭐ |
| 支持統一的外觀 | ✔️ | ⭐⭐⭐ | ❌ | ✔️ | ⭐⭐⭐ |
| 平台原生外觀 | ❌ | ✔️ | ⭐⭐⭐ | ✔️ | ⭐ |
| 平台一致性 | ✔️ | ⭐⭐⭐ | ✔️ | ⭐ | ✔️ | ⭐⭐ |
| 原生控制項集成 | ✔️ | ⭐ | ✔️ | ⭐⭐⭐ | ✔️ | ⭐⭐⭐ |
| xaml 語法和代碼共享 | ✔️ | ⭐⭐ | ✔️ | ⭐ | ✔️ | ⭐⭐⭐ |
| c# 代碼隱藏共享 | ✔️ | ⭐⭐ | ✔️ | ⭐ | ✔️ | ⭐⭐⭐ |
| 熱重載 | ❌ | ✔️ | ⭐⭐⭐ | ✔️ | ⭐⭐⭐ |
| 第三方支持 | ✔️ | ⭐ | ✔️ | ⭐⭐⭐ | ✔️ | ⭐⭐ |
| 高級文本格式 | ✔️ | ⭐⭐⭐ | ❌ | ❌ |
| 非用戶界面功能 | ❌ | ✔️ | ⭐⭐ | ✔️ | ⭐⭐⭐ |
| ▶ Strategy & Development | |||
| 性能(理論) | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| 移動應用穩定性 | ⭐ | ⭐⭐ | ⭐⭐ |
| 桌面應用穩定性 | ⭐⭐⭐ | ⭐⭐ | ⭐ |
| 可用控制項 | ⭐ | ⭐⭐ | ⭐⭐⭐ |
| 代碼許可證 | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| 免費支持 | ⭐ | ⭐⭐ | ⭐⭐⭐ |
| 付費支持 | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ |
| 項目速度 | ⭐⭐ | ⭐⭐ | ⭐⭐ |
| 易於貢獻 | ⭐⭐⭐ | ⭐⭐ | ⭐⭐ |
| 代碼庫可讀性 | ⭐⭐⭐ | ⭐ | ⭐ |
| 開發人員體驗 | ⭐⭐⭐ | ⭐⭐ | ⭐ |
| 企業支持 | ⭐⭐ | ⭐⭐ | ⭐⭐⭐ |
| ▶ ide 和集成工具 | |||
| Visual Studio | ✔️ | ⭐⭐ | ✔️ | ⭐⭐⭐ | ✔️ | ⭐⭐ |
| Visual Studio Code | ✔️ | TBD | ✔️ | ⭐⭐ | ✔️ | ⭐⭐⭐ |
| Rider | ✔️ | ⭐⭐⭐ | ✔️ | ⭐ | ✔️ | ⭐⭐ |
| Design tool integration | ❌ | ❌ | ✔️ | ⭐⭐ |
| ▶ 平台支持 | |||
| iOS | ✔️ | ⭐ | ✔️ | ⭐⭐⭐ | ✔️ | ⭐⭐ |
| Android | ✔️ | ⭐ | ✔️ | ⭐⭐⭐ | ✔️ | ⭐ |
| windows 桌面應用 | ✔️ | ⭐⭐ | ✔️ | ⭐ | ✔️ | ⭐⭐⭐ |
| macos 桌面應用 | ✔️ | ⭐⭐⭐ | ✔️ | ⭐ | ✔️ | ⭐ |
| linux 桌面應用 | ✔️ | ⭐⭐⭐ | ❌ | ✔️ | ⭐ |
| Web Browser (WASM) | ✔️ | ⭐ | ❌ | ✔️ | ⭐⭐⭐ |
| ▶ 整體平台支持 | |||
| 移動端 | ✔️ | ⭐ | ✔️ | ⭐⭐⭐ | ✔️ | ⭐⭐ |
| 桌面程式 | ✔️ | ⭐⭐⭐ | ✔️ | ⭐ | ✔️ | ⭐ |
| Web | ✔️ | ⭐ | ❌ | ✔️ | ⭐⭐⭐ |
該表格最近一次更新是在 2023 年 7 月.
備註
mvu 模式
.NET MAUI 对传统上认为的带有 C# Markup and Comet的 MVU 模式具有最完整的支持. 这是一个活跃的试验性和开发领域,预计未来将得到和 MVVM 的相同级别的支持。Uno Platform 开发了自己的 MVU 变体,称为 MVU-X。这与其他产品有很大不同,并且具有更高的学习曲线,但确实与 XAML 数据绑定集成得更好。MVU 模式这一全新方法的长期可行性还有待观察,在这实验性的方案稳定之前,最好谨慎选择。Avalonia 没有直接的支持 MVU 模式。但是,它提供了两个类库支持使用声明性语法替代 XAML 编写 UI 界面。Avalonia.Markup.Declarative通过在 Avalonia 上提供帮助方法和扩展来支持许多 C#标记概念。这提供了一种用 C#编写 UI 界面的好方法,该方法可以遵循 MVU 模式而不需要使用 XAML。F# 开发人员的另一个选择是Avalonia.FuncUI,它专门为 F#语言提供了类似的支持。值得注意的是,在所有框架中,Avalonia 对 F# 的支持最好(由社区提供)。
Pixel-Perfect Rendering
在這三個框架中,只有 avalonia 支持真正的“pixel-perfect”渲染。這是由於架構的原因,只有 avalonia 完全繪製了自己的用戶界面和控制項。雖然 uno platform 試圖實現“pixel-perfect”,但由於使用原生的基本控制項,在不同平台之間經常存在差異。uno platform(skia 除外)從未完全繪製自己的控制項,因此只是趨近於“pixel-perfect”。
無固定外觀控制項(lookless controls), 樣式 & 主題
当开发人员想到 XAML 时,他们通常会想到无固定外观控件(lookless controls)。能够完全更改控件的样式和默认模板以将其转换为完全不同的内容是 WPF 的一个主要功能。Avalonia 和 Uno Platform 都完整支持自己版本的无固定外观控件(lookless controls)和模板重定义。但是,MAUI 不具备此功能,仅支持更改一些常见的属性。在这方面,可以把 MAUI 看作是 Windows Forms 这类较旧的界面工具包。例如,这意味着在 MAUI 中不支持在按钮内放置图标或图形,而在其他的 XAML 框架中则很容易实现。什么是Lookless Controls WPF 控件的行为是固定的。例如,按钮有一组固定的事件,包括单击事件。不管你用按钮控件做什么操作,它仍然会有一个点击事件。 WPF 控件没有固定的“外观”。Lookless 这个词恰好可以简洁的表达这个意思。 按钮的默认外观是由默认的 XAML 模板定义的,可以替换一个完全不同的模板,从而完全改变按钮控件的外观。
平台一致性
在使用跨平台框架進行開發時,應用程式和代碼的一致性非常重要。您不想在一個平台上開發和驗證的功能,然後發現它在另一個平台上的運行效果不同。在這方面,.net maui 非常差,因為它連結到每個平台上的原生控制項。這不僅需要對所有地方進行驗證,而且需要多次編寫自定義控制項,同時花費大量時間調整內容以使其看起來一致(類似於讓網頁在所有瀏覽器上正確呈現)大多數情況下,uno platform 比 maui 表現得更好。但是,它也存在一些嚴重的問題,一些功能並不是在所有平台上都支持。那些所有平台上都有的功能通常表現一致,但也可能存在很難修復的細微差異。由於架構差異,avalonia ui 在平台一致性的問題上很容易超越其他框架。avalonia 完全自己渲染,因此它在每個平台上看起來總是完全相同(字體、輸入差異、彈出窗口等除外)。
原生控制項集成
net maui 和 uno platform 都建立在 xamarin native 之上,並與之完全集成。這意味著兩個框架都可以通過 c#綁定訪問特定於平台的原生控制項。這對於訪問原生平台功能和控制項來說非常強大,幾乎沒有任何妥協。可以直接在 xaml 和代碼隱藏中添加原生控制項,就像框架本身內置的任何其他控制項一樣。相比之下,avalonia ui 是它自己的 ui 層,它不直接與 xamarin native(及其特定於平台的控制項)集成。作為替代,avalonia 提供了一個允許在 avalonia 應用程式中嵌入本地控制項的 nativecontrolhost。但是,這並不像 maui 或者 uno platform 中那樣簡潔。類似於 wpf 中的 windowsformshost,但與之不同的是,avalonia ui 還使用 3d 元素解決了“空域問題”,可以直接在各種表面上繪製 ui。這實際上允許 avalonia 在遊戲引擎或 directx 上運行,這在其他框架中是不可能的。
xaml 語法和代碼共享
在代碼共享方面,uno platform 擁有最高的評分。它使用與 uwp/winui 相同的 xaml 方言和對象模型,這使得它在 xaml 和 c# 100% 兼容。avalonia 和 maui 都偏離了過去的 xaml 版本,與 wpf 或 uwp/winui 都不兼容。儘管如此,avalonia 努力在對象模型方面與 wpf 相似, maui 會因為很少的原因(height/width, textblock 等)而偏離。在一些情況下,avalonia 還成功地成為了更強大的下一代 wpf 語法和對象模型。由於對 xaml 的一些改變(樣式,bool 類型的 isvisible,簡化的網格行/列語法等),使得一些操作在 avalonia 中更容易。與 maui 相比,avalonia 與現有 wpf 代碼的兼容性和代碼共享更好,因此總體評分也更高。
高級文本格式
最初的 xaml 框架 wpf 具有非常先進的文本格式 api(flowdocument)。這仍然比今天在 winui 3 或之前的 uwp 中發現的更高級。事實上,在 avalonia ui 版本 11.0 之前,沒有其他跨平台 xaml 框架支持高級文本特性。現在,avalonia ui 具有與 wpf 幾乎相同的 api,並且可以完成在 .net maui 和 uno platform 上根本不可能完成的文本格式化和測量。由於架構上的差異,在可預見的未來,avalonia ui 很可能仍將是唯一支持高級文本(不依賴第三方控制項)的框架。這包括諸如 richtextbox 之類的控制項,這些控制項可以在 avalonia 中實現,但在 uno platform 中非常困難,在 .net maui 中幾乎是不可能的。
非 ui 功能
avalonia ui 的主要缺點是它只是一個 ui 框架。. net maui 有必備的軟體包,uno platform 是繼 uwp 之後的一個完整的應用開發平台。可以說.net maui 和 uno platform 都不僅僅是一個 ui 框架。這意味著在.net maui 和 uno platform 中諸如持久化設置、文件處理、身份驗證、本地化和設備權限等內容都可以立即使用,但在 avalonia 不行。uno platform 甚至具有一些僅在 uwp 中才能找到的音頻相關的高級 api,並且可以跨平台。uno platform 試圖覆蓋整個 uwp 的對外暴露的 api(api-surface),這包含大量的 api。整個 api 是自動生成的,其中許多功能未實現 stubs。這意味著大多數非 ui 的 api 不可用,如果在應用中使用它們,則會引發異常。這確實會在開發過程中產生一些問題,但編譯器會顯示正在使用哪些未實現的 api。儘管如此,uno platform 依然比其他框架擁有更多的非 ui 功能。
性能
xaml 源自於桌面應用,本身也相當消耗資源。wpf(最初的 xaml 框架)通常在運行時從 xaml 標記中構建整個視圖,這在首次加載時可能會嚴重影響性能。此外,使用 mvvm 是通過反射綁定把控制項綁定到 viewmodel 上,相比於編譯後的代碼,反射綁定本來就慢一些。最重要的是,傳統的 xaml 控制項具有更高的性能和系統要求,這可能是移動平台或雲平台需要考慮的問題。uwp 和 uno platform 通過 x:load 允許懶加載來改進這一點。它們都支持使用 x:bind 進行編譯綁定。maui 的體系結構通過使用原生控制項完全避免了第一個問題。avalonia ui 已在很大程度上切換到預編譯的 xaml 和編譯綁定,這也解決了這兩個問題。這三種框架理論上性能都優於 wpf。與性能相關的 mvu 模式不應被忽視。ui 不是由 xaml 標記構造的,它通常是在代碼中和代碼隱藏中的業務邏輯一起構造。默認情況下,這意味著控制項和用戶界面元素只有在被代碼引用並需要顯示時才會構造。通過這種方式,使用 mvu 模式的性能有望超過 mvvm 模式應用程式的性能。maui 和 uno platform 都支持 mvu 模式。avalonia 也完全支持在代碼中創建 ui,而不使用 xaml,從而獲得同樣的性能優勢。maui 的性能並非故意評為兩顆星,低於 avalonia 的三顆星。其原因是:maui 使用原生控制項,是互操作。本機編譯在很大程度上緩解了這一問題,但 c#和 android 控制項集成都會降低性能。然而,avalonia 完全渲染自己,並且不與 android 原生控制項交互(除非託管本機視圖)。這意味著 avalonia 基本上可以擁有視頻遊戲(video game)的性能。uno platform 的性能在大多數平台上通常都是足夠的。但是,在 android 上,.net 運行時和 java 運行時之間存在嚴重的互操作性能問題。這是.net 和 android 本身的問題。然而,由於 uno platform 的體系結構(與本機控制項集成),這種互操作總是必需的。這意味著,在 android 上,uno platform 的性能從根本上不如其他框架,並且 android 上的高性能 uno platform 應用程式目前是不可能實現的。
應用穩定性
maui 的移動應用穩定性與 uno platform 排名相同;但是,在不同平台上遇到需要用大量針對特定情況的代碼和標記來處理的布局問題是很常見的。uno platform 還有許多沒有處理的情況和一些 bug,這些都會在整個開發過程中出現。這在很大程度上是快速開發速度優於正確性和穩定性的策略帶來的結果。相比之下,avalonia ui 從一開始就考慮到穩定性:它的功能是完整的。在實踐中,avalonia ui 可能是最穩定和最容易開發的。
代碼的許可協議
Uno Platform 采用的不是 MIT license,而是 Apache 2.0。Apache license 不像 MIT 那样宽松。除了别的方面,这阻止了代码共享回其他 MIT 许可的框架。Uno Platform 可以使用 MIT 许可项目(如 WinUI、WPF 和 Avalonia)的源代码,但这些项目基本上不能使用 Uno Platform 的代码。这就是为什么 Uno Platform 在这里排名较低。Avalonia UI 最初完全是 MIT 授权的,并获得了三星评级。但是,随着 re-licensing of the composition renderer,禁止以原始二进制形式以外的任何形式进行修改和分发,这降低了分数。合成渲染器(composition renderer)是 Avalonia 版本 11+中唯一支持的渲染器,其他渲染器已被删除。这使得修改 Avalonia 并在您自己的应用程序中分发它被禁止。该团队已经澄清,该许可证将“在 v11 进入 GA 时恢复到 MIT”。(此部分于 2023 年 7 月废弃,有下一段内容替代。) Avalonia UI 完全是 MIT 授权的,可以在大多数.NET 基金会和 WinUI 项目之间免费共享代码。对于需要完全掌控 UI 框架以达到快速推送修复,确保特定应用稳定性的目的,甚至是想替换自定义的内部组件的公司来说,Avalonia UI 是一个理想的选择。
支持
儘管 maui 是由 microsoft 開發的,avalonia 和 uno platform 在付費支持方面的排名依舊都高於 maui。這主要是由於小公司的敏捷性。microsoft 現在高度官僚主義,任何反饋或變化,即使是微小的,都需要廣泛的討論才能採取行動。這與 avalonia 形成鮮明對比,avalonia 可以非常快速地採用新功能,uno platform 溝通速度也非常快。在免費支持方面,uno platform 社區的響應次數與更為龐大的 maui 社區相當。但是 uno platform 通常可以更快的解決 bugs 並實現功能。
代碼庫的易讀性和易於貢獻
avalonia ui 擁有最乾淨的代碼庫,大大降低了公眾貢獻的門檻。uno platform 和 .net maui 的要複雜得多,可以從代碼上看出這點。從長遠來看,複雜性的增加通常在維護和穩定性方面成本變得很高。在 uno platform 中,這種複雜性對於滿足體系結構目標和支持原生控制集成是必要的。
開發體驗
avalonia ui 擁有最好的整體開發體驗。代碼庫易於閱讀,使用 rider 的開發調試體驗是一流的(在其他 ide 上則要差一些)。. net maui 緊隨其後,因為它現在與 visual studio 的集成超過了所有其他的框架。由於需要在每個平台上分別驗證/調整每個特性/視圖,.net maui 在整體開發體驗方面存在不足。uno platform 的開發體驗很差,與 visual studio 的集成較少,編譯時間長,調試也很困難。有關開發體驗的更多詳細信息,請參閱 ide 集成部分。
企業支持
乍一看,microsoft 開發的 .net maui 似乎擁有最強大的企業支持。然而,microsoft 並沒有在這個項目上投入大量資源,根據 microsoft 放棄 ui 框架的歷史,對 maui 的支持也存在不確定性。avalonia 雖然最初是完全開源的,但現在得到了一些核心團隊成員的公司的支持。這為維持項目提供了良好的穩定性和收入衡量標準。但是,需要謹慎的是企業對其影響的增加以及代碼庫閉源的進展。例如,合成渲染引擎現在不是可以修改的自由許可證(而其餘代碼是 mit 許可的),這一點會在 v11 正式版發布後改回來。uno platform 憑藉創新和令人難以置信的溝通和響應次數,在企業贊助方面依然獨樹一幟。值得注意的是,它們與 microsoft 有著合作以及密切的溝通。
visual studio 集成
沒有一個框架在 visual studio 集成方面有三星。這是因為 visual studio 歷來專注於 windows 平台框架,如 winforms、wpf、uwp 和 winui,並以不可擴展的方式對這些框架進行硬編碼支持。但是,.net maui 的支持有了很大的改進(從發布時幾乎無法使用開始)。uno platform 的 visual studio 集成還有很多需要改進的地方,顯然是三者中開發體驗較差的一個。這不是他們的錯,因為 microsoft 不合理地支持使用 .xaml 文件的任何其他項目類型。visual studio 中的 avalonia 支持提供了可靠的預覽器支持,並且大多數功能都可以工作- 通過使用特殊的.axaml 擴展名 - 但 xaml 並不像其他 ide(如 rider)那樣流暢。
visual studio code 集成
Uno Platform 团队为Visual Studio Code 开发了一个扩展,支持开发,更重要的是,可以调试移动和 Web 应用程序。这是 VS Code 工具向前迈出的一大步,而 VS Code 工具作为 C#/.NET 应用程序的 IDE 历来对开发人员不友好。令人惊讶的是,该扩展还支持.NET MAUI 应用程序。Uno Platform 团队确实在这方面迈出了一步,填补了 VS Code 支持 C#/.NET 应用程序方面长期存在的空白,因此 Uno Platform 在这款 IDE 集成方面获得了三颗星的评价。Uno Platform 应用程序现在在 Visual Studio Code 中得到了最好的支持(除非在 Windows 上开发 WinUI,其中 Visual Studio 仍然是最好的)。请注意,这个扩展不是开源的。Avalonia UI 于 2023 年 7 月公布 了一个支持 XAML 预览和代码补全的Visual Studio Code 插件预览版。这使得 Avalonia UI 在 Visual Studio Code 中更易于开发,并将使其成为一个可选的 IDE。
設計工具集成
目前只有 uno platform 支持設計工具(figma)來構建 ui。這種支持是由一個閉源 xaml 生成器提供的。過去 microsoft blend 可供 wpf 支持相同的作用。生成的 xaml 的質量和效率可能不足,但是,對於那些在設計與開發團隊之間有明確劃分的公司來說,它有助於設計師到開發人員的過渡。. net maui 不支持任何設計工具,並且由於其體系結構可能永遠不會。然而,它對 xaml 的實時編輯提供了開箱即用的支持,這使得設計人員可以在添加代碼之前直接在應用程式中調整和添加一些 ui 元素。uno platform 也支持 xaml 的實時編輯。
平台支持
uno platform 支持大多數平台,幾乎可以在任何設備上運行,並取得不同程度的成功(它最強大的領域是移動端和網頁)。uno platform 通過 winui/uwp 直接支持 windows 桌面應用,因此在 windows 桌面原生應用中獲得了最高的排名,需要注意的是,在 uno platform 中,某些後端和平台缺少其他後端和平台具有的功能。這可能會導致你可以在 ios/android 上做一些不能在 linux 上做的事情。因此,平台支持並不一致,應該仔細審查。在 macos 上尤其如此,uno platform 在上次測試(2021 年)時運行極差。如今,使用 maccatalyst 構建 macos 應用通常會更好,因為 uno platform 對 ios 的支持明顯更好、更完整。skia 後端也適用於所有桌面平台(甚至是舊版本的 windows)。請記住(如性能部分所述)uno platform 在 android 上的性能不如 ios。avalonia ui 遠遠領先於 macos 和 linux 桌面平台的其他框架。avalonia 在 windows 桌面平台上的得分也很高,但沒有使用原生 ui 工具包,所以得分比 uno platform 低一些。移動端和 web 支持是 11.0 版中新發布的,可能需要一些時間才能穩定下來,因此目前得分較低。avalonia 的 web 實現呈現為 html5 canvas。這永遠不會像 uno platforms 架構那樣好,在 uno platforms 中,它完全集成為 html 元素。. net maui 根本不支持 linux 或 web。在平台覆蓋面上明顯不如其他兩個框架。
各平台框架推薦
在每個平台上,都有性能最佳的框架。這也是主觀的; 但是,總體而言,評估應該是正確的,並考慮到所有的因素。
| 平台 | 最佳框架 | |
|---|---|---|
| Windows | WPF/WinUI | |
| macOS | Avalonia UI | |
| Linux | ||
| Android | ||
| iOS | ||
| Web/Wasm |
如果一個應用程式只需要用於桌面平台,avalonia 是一個非常好的選擇。它對 windows 的支持是一流的,只是因為不是原生 ui,所以排在 winui 或 wpf 之後。然而,avalonia 在桌面應用程式中沒有明顯的短板,許多桌面應用程式已經在使用它了。事實上,avalonia 什至支持在 wpf 中無法完成的操作,例如在 directx 表面上覆蓋 xaml 控制項。
如果應用程式需要跨平台,可以先用 winui 或 wpf 編寫。在 windows 上使用 wpf 代碼庫可以很好地轉換為 avalonia,但仍然需要三種不同的 xaml 變體。出於這個原因,通常最好使用 winui,因為它可以與 uno platform 的代碼 100%共享。這樣就只需要兩種 xaml 變體。
另請注意:
- web/wasm 是 uno platform 的一個明顯優勢。由於架構差異(完全使用 skia 渲染),avalonia 很難在這個方面競爭。
- avalonia ui 更像是 flutter 的競爭對手。它使用 skia(或者選用 windows 上的 direct2d)在每個平台上完全渲染自己。這比 unoplatform 有很大的性能優勢,尤其是在 macos 和 android 上。通過這種方式,avalonia 擁有所有框架中最純粹的架構和最低的社區參與門檻。
- avalonia ui 被定位為下一代 wpf,它重新實現了大部分功能。avalonia 從 wpf(grid, text formatting)和 winui (itemsrepeater, touch input apis)中汲取思想和代碼,同時仍然有一些其他 xaml 框架中沒有的獨特想法(在某些方面更接近 css 的高級樣式系統)。它現已為桌面應用開發人員準備就緒,尤其是那些已有 wpf 代碼的開發人員。對於 uwp/winui 開發人員來說,這個過渡不太平滑,但在版本 11 中添加了 uwp/winui 的最新功能以改進過渡。對於不想更改現有 wpf 代碼的企業應用程式,avalonia 還提供了 avalonia xpf,它在 avalonia 渲染引擎之上實現了開源的 wpf 代碼庫。
- net maui 特意沒有列為任何平台最佳方案。它對於沒有複雜 ui 的小型應用程式最有用。即便是在中等複雜程度的應用程式中,它的實用性以及在不同平台之間共享代碼的能力,很快就要落後於其他的框架。然而,在某些業務線或更簡單的應用程式中,maui 可能是更好的選擇。maui 最近還能夠同時託管 blazor 和 avalonia ui,這為某些場景提供了一個有趣的選擇。
- windows 10 之前的版本最合適的選擇是 avalonia。雖然 uno platform 也有依託 skia 的解決方案,但它在功能,穩定性和完整性方面遠遠落後。
- 如上表所示,使用兩種 xaml 方言(dialects of xaml)可以很好地支持所有平台。winui/uwp 適用於 windows(uno platform 用於移動端),其餘的使用 avalonia。
參考和連結
- Question: XAML Flavor, Architecture & Roadmap
- The New .NET Multi-platform App UI
- Goodbye Xamarin.Forms
- Putting “Universal” back into UWP
- Evolution of Client Development: Richard Campbell
- [Spec] Slim Renderer Architecture
- Discussion: Compatibility with WPF, UWP and WinUI
- Project Reunion: An End to Microsoft’s UI Madness?
結論
我們花了數年時間才走到這一步,但我們終於有了一些涵蓋所有用途的強大的 .net ui 框架。有趣的是,這些框架都發展了一些各自特有且幾乎互補的功能。您可能想要嘗試的所有內容都包含在其中一種方法中。今天,我們可以編寫運行良好的跨平台 xaml/c# 應用程式。大多數這項技術(除了 ui 層)都是基於 mono 的,所以大部分功勞都歸功於 xamarin。
每個框架所取得的成就都是了不起的。然而,沒有一個在所有平台上都占主導地位,每個框架都有自己的優勢和劣勢。uno platform 源自於 android/ios,它在移動平台和 web 端是最強的。avalonia 源自桌面應用程式,在 windows/linux/macos 上運行效果最好,但行動裝置支持上正在迅速發展。截至 2023 年,uno platform 的 macos 支持充其量只是實驗性的,只能用於開發簡單的應用程式。截至 2023 年,avalonia 最初僅支持行動裝置,但實際上在所有平台上都更加穩定。不過,目前可能還是需要使用兩種不同的 ui 框架實現基於 xaml 的跨平台 ui。
原文連結:https://github.com/robloo/PublicDocs/blob/master/XAMLFrameworkComparison.md
作者:czwy
出處:https://www.cnblogs.com/czwy/p/17572226.html
版权:本作品采用「署名-相同方式共享 4.0 国际」许可协议进行许可。