一 引言:跨平台图形界面的历史张力与技术真空

  在软件工程的演进史中,跨平台图形用户界面(GUI)的开发始终是一个充满了妥协、权衡与技术博弈的领域。长久以来,开发者被迫在“一次编写,到处运行”的效率愿景与“原生级性能与体验”的质量要求之间做出艰难抉择。在这一漫长的探索周期中,C++与其王牌框架Qt长期占据了工业级、嵌入式及高性能桌面应用开发的统治地位。Qt以其底层的控制力、强大的元对象编译器(MOC)以及对操作系统API的深度抽象,成为了衡量跨平台框架的黄金标准。

  然而,随着.NET生态系统的崛起,特别是C、内存安全性以及运行时优化方面的长足进步,一个巨大的市场真空逐渐显现:.NET开发者渴望一个能够媲美Qt的跨平台能力,同时又能保留C。微软虽然先后推出了Windows Forms、WPF(Windows Presentation Foundation)、UWP以及最近的MAUI,但这些技术主要聚焦于Windows生态,或在跨平台策略上采取了“包装原生控件”(Wrapper)的路径,导致了平台间表现不一致的顽疾。

  正是在这种技术与市场的双重张力下,Avalonia UI应运而生。本文将以Avalonia UI现任首席执行官Mike James的职业历程为叙事线索,深度剖析从Qt时代的工业积淀到Avalonia时代的架构创新。我们将探讨这位曾经的Qt开发者如何将对C++框架的深刻理解转化为.NET生态中的颠覆性力量,并详细对比Avalonia与Qt在渲染引擎、状态管理、绑定机制等核心维度的技术差异。同时,本文将深入研究AvaloniaUI Oü独特的商业化路径——如何在拒绝外部风险投资的前提下,通过“核心开源+商业闭源(XPF)”的混合模式,成功挑战Qt在嵌入式与企业级市场的霸主地位。

二 轨迹的交汇:Mike James与跨平台哲学的演变2.1 Qt时期的技术洗礼:工业级严谨性的初识

  Mike James的技术生涯始于大学毕业后的第一份工作,彼时他置身于C++与Qt(他习惯称之为“Cute”)构建的跨平台开发环境中 1。在那个时期,Qt已经是跨平台开发的代名词,特别是在对性能要求极高的桌面与嵌入式领域。

  这段经历对Mike James产生了深远的影响,主要体现在对“自绘UI”(Drawn UI)架构优势的早期认知。Qt Widgets(当时的主流技术,即“Cute Four”时代)并不依赖操作系统的原生控件来渲染按钮或文本框,而是通过自身的绘图引擎在画布上绘制像素 1。这种设计哲学保证了应用程序在Windows、Linux和macOS上拥有绝对一致的视觉表现和行为逻辑,消除了“原生包装器”常见的布局错位和API差异问题。

  然而,C++作为一种系统级语言,其内存管理的复杂性(尽管Qt引入了对象树机制来辅助管理)和编译速度的瓶颈,让Mike James开始思考开发效率的重要性。他提到了自己“错过了Qt转向QML的阶段” 1,这意味着他在Qt生态中的经验主要集中在命令式的C++逻辑上,而非后来引入的声明式UI(QML)。这种“错过”在某种程度上成为了他后来拥抱XAML(.NET生态的声明式语言)的契机,他意识到声明式UI在构建复杂界面时的优越性,但同时也看到了强类型语言在大型工程维护中的必要性。

2.2 转向.NET与Xamarin:移动端跨平台的探索与反思

  离开Qt开发环境后,Mike James加入了Xamarin(后被微软收购),这标志着他从C++向C#/.NET生态的彻底转型 1。Xamarin的使命是将.NET带入iOS和Android开发领域,其核心技术是Mono运行时。

  在Xamarin和随后的微软任职期间,Mike James深入接触了移动端跨平台开发的另一条技术路线——原生控件包装(Native Wrapping)。Xamarin.Forms(以及后来的.NET MAUI)通过抽象层调用iOS的UIKit和Android的Views。这种方式虽然能提供“原生外观”,但却带来了巨大的维护成本:

API“最大公约数”问题

  :框架只能暴露所有平台共有的功能,导致特定平台的特性难以利用。

渲染不一致

  :同一个XAML布局在不同OS上可能有完全不同的渲染结果,导致开发者需要编写大量的平台特定代码(Custom Renderers)来修复UI bug。

  这段经历让Mike James更加怀念Qt式的“自绘”模式。他意识到,.NET生态需要一个像Qt一样完全控制渲染管线,但又能利用C。这为他后来全身心投入Avalonia项目埋下了伏笔。

2.3 从贡献者到掌舵人:Avalonia的商业化转型

  Avalonia(原名Perspex)最初由Steven Kirk于2013年创建,旨在创建一个跨平台的WPF 2。Mike James并非创始人,但他作为核心贡献者深度参与了项目的早期发展,并在2019年创立了AvaloniaUI Oü,出任CEO 3。

  Mike James的加入不仅带来了技术上的贡献,更重要的是带来了商业上的战略视野。他面临的核心挑战是:如何在一个由巨头(微软、Google、Qt Company)把持的红海市场中,让一个开源项目生存并盈利?他拒绝了外部风险投资(VC)的诱惑 5,坚持认为引入VC会迫使公司追求短期增长而牺牲开源社区的利益。相反,他制定了一条“服务驱动产品,产品反哺开源”的独特路径,通过为企业解决WPF迁移的痛点(Avalonia XPF)来获取资金,从而维持核心框架的独立性和开源纯度。

三 深度技术对决:Avalonia UI vs. Qt 架构解析

  Avalonia常被视为“.NET版的Qt”,二者在设计哲学上有诸多相似之处(如自绘渲染),但在底层架构、语言特性及通信机制上存在本质差异。本章将从微观层面剖析这两大框架的技术基因。

3.1 渲染引擎架构:Skia与QPainter的较量3.1.1 Qt的渲染演进:从光栅化到场景图

  Qt的渲染历史悠久且复杂,主要分为两个阶段:

QPainter (Widgets)

  :这是Qt传统的命令式2D绘图引擎 6。它通过统一的API抽象了底层的绘图上下文(Windows GDI, X11, macOS Quartz)。虽然稳定,但在现代高分辨率屏幕和复杂动画场景下,QPainter基于CPU的光栅化能力逐渐显露出瓶颈。

Qt Quick / Scene Graph

  :随着QML的引入,Qt构建了基于场景图(Scene Graph)的渲染管线。它能够将UI元素构建为节点树,并直接利用底层图形API(OpenGL, Vulkan, Metal)进行GPU加速渲染。

3.1.2 Avalonia的渲染策略:SkiaSharp与平台抽象

  Avalonia采取了更为现代和统一的策略,其渲染架构更接近于Google的Flutter:

Skia为核心

  :Avalonia默认使用Skia图形库(通过SkiaSharp绑定)作为跨平台渲染后端 7。Skia也是Chrome浏览器和Android界面的渲染引擎,这意味着Avalonia天生具备了高性能的2D矢量绘图能力。

像素级控制

  :与MAUI依赖原生控件不同,Avalonia通过Skia在操作系统的窗口(Window)上直接绘制所有UI元素。这种“自绘”机制保证了在Linux、Windows、macOS乃至WebAssembly上,像素的渲染结果是完全一致的 8。

风险管理与“保险策略”

  :Mike James透露,Avalonia团队为了规避SkiaSharp维护者单一的风险,曾在内部开发了自己的Skia绑定 7。这一细节展示了商业公司在技术选型上的成熟度——不仅追求性能,更关注供应链安全。

未来架构(Impeller与GPU优先)

  :受到Flutter转向Impeller渲染器的启发,Avalonia v12计划引入实验性的GPU优先渲染管线 7。目前的Skia主要依赖CPU进行路径光栅化(尽管可以上传纹理到GPU),在高负载下可能导致掉帧。新的渲染架构旨在消除着色器编译引起的卡顿(Jank),利用GPU的计算能力直接处理几何图形,这将使Avalonia在动画流畅度上进一步逼近甚至超越原生Qt Quick的表现。

3.2 通信与状态管理:编译绑定 vs. 信号与槽3.2.1 Qt的信号与槽(Signals & Slots)与MOC

  Qt最引以为傲的机制是信号与槽,它解耦了对象间的通信。

元对象编译器(MOC)

  :由于C++缺乏原生的反射机制,Qt必须通过MOC预处理头文件,生成包含元数据的额外C++代码,以支持运行时的方法查找和连接 10。

性能代价

  :虽然MOC非常强大,但信号槽的调用(特别是跨线程的队列连接)涉及参数的编组(Marshalling)和内存复制,存在不可忽视的运行时开销。此外,MOC增加了构建系统的复杂性,使得Qt项目难以与标准C++构建工具链无缝集成。

  3.2.2 Avalonia的编译绑定(Compiled Bindings)

  Avalonia继承了WPF的MVVM(Model-View-ViewModel)模式,但彻底解决了WPF数据绑定的性能痛点。

反射的诅咒

  :传统的WPF绑定依赖运行时反射(Reflection)来解析属性路径,这在处理包含成千上万个对象的大型列表时,会导致严重的性能下降和内存压力。

编译绑定的革新

  :Avalonia引入了x:CompileBindings 11。编译器在构建阶段解析XAML中的绑定路径(如{Binding Customer.Name}),并将其直接编译为强类型的C。这意味着运行时不再需要反射,绑定的执行速度接近于手写的C。

类型安全

  :与Qt QML(基于JavaScript的动态类型)相比,Avalonia的编译绑定在编译时就能发现类型不匹配错误(例如将字符串绑定到整型属性),极大地提升了大型企业级应用的开发稳定性和可维护性 1。

响应式编程(ReactiveUI)

  :Avalonia与ReactiveUI深度集成,支持基于Rx.NET的函数响应式编程(FRP)。相比于Qt的命令式信号处理,ReactiveUI允许开发者以声明式的方式组合异步数据流,处理复杂的事件序列(如“防抖”、“节流”、“合并”),这在现代交互密集的应用中具有显著优势 13。

3.3 逻辑树与样式系统:CSS化的XAML

  Avalonia对WPF的逻辑树(Logical Tree)和视觉树(Visual Tree)概念进行了扩展,引入了极具创新性的样式选择器系统 15。

类CSS选择器

  :在Qt中,QSS(Qt Style Sheets)虽然存在,但与QML的样式系统是割裂的。Avalonia允许开发者在XAML中使用类似CSS的选择器,如Style Selector="Button.primary:pointerover TextBlock"。这使得样式的定义与控件结构解耦,设计师可以像写Web页面一样定义全局主题,而无需修改控件代码 17。

伪类(Pseudo-classes)

  :Avalonia的样式系统支持自定义伪类。开发者可以在C(如:invalid, :syncing),UI会自动响应样式变化。这种机制比Qt的属性状态绑定更为灵活和解耦。

3.4 架构对比总结表

  下面的表格总结了Avalonia UI与Qt Framework在关键技术维度的对比:

  维度

  Avalonia UI

  Qt Framework

  深度洞察

核心语言

  C# /.NET

  C++ / QML (JavaScript-like)

  C;C++在极端资源受限的嵌入式设备上仍有微弱的性能优势。

UI描述语言

  XAML

  QML /.ui (XML) / C++

  XAML结合编译绑定提供了静态类型安全 1;QML更灵活但缺乏编译时检查,易在大型项目中引入隐蔽Bug。

渲染后端

  Skia (当前), GPU First/Impeller (未来 v12)

  QPainter, OpenGL, Vulkan, Metal

  Avalonia的Skia方案保证了跨平台一致性;Qt允许更底层的图形API访问,但在不同OS上的一致性维护成本较高。

通信机制

  Compiled Bindings (编译时), ReactiveUI

  Signals & Slots (运行时/MOC)

  编译绑定消除了反射开销,性能优于基于MOC的动态查找;ReactiveUI在处理异步流时比信号槽更具表现力。

二进制兼容性

  极高 (.NET Standard/Core)

  低 (需针对每种编译器/平台重新编译)

  .NET的中间语言(IL)特性使得Avalonia库的分发(NuGet)远比Qt的C++库链接简单,尤其是在CI/CD流程中。

样式系统

  CSS-like XAML Styles

  QSS / QML Styling

  Avalonia将CSS的灵活性带入了原生桌面开发,样式复用性极强。

四 商业决策与创业故事:开源与生存的辩证法

  Mike James领导下的AvaloniaUI Oü并非典型的硅谷创业故事。它没有巨额融资,没有烧钱扩张,而是走出了一条“技术变现反哺开源”的务实路线。

4.1 拒绝外部资本:保持独立的代价与收益

  在Avalonia初创期,团队面临着开源项目普遍的困境:核心开发者需要养家糊口,单纯依靠捐赠无法维持全职开发。尽管有投资人抛出橄榄枝,Mike James及其团队最终决定不接受外部风险投资 5。

决策逻辑

  :引入VC意味着必须追求高增长和退出机制(IPO或被收购),这往往会导致公司在后期对开源社区进行“收割”(如修改开源协议)。Mike James希望Avalonia保持MIT协议的纯粹性,确立了“可持续开源”(Sustainable Open Source)的愿景。

自造血模式

  :公司通过提供企业级支持协议(SLA)和定制开发服务(Development Services)赚取了第一桶金 18。许多从WPF迁移到.NET Core的企业需要专家指导,Avalonia团队利用这一需求实现了收支平衡。

4.2 从服务到产品:商业模式的进化

  单纯依靠卖“人时”的服务模式难以规模化(Scaling)。Mike James敏锐地捕捉到了市场中的“棕地”(Brownfield)机会——那些不仅需要新开发,更需要维护和迁移旧系统的企业。

Avalonia XPF的诞生:这是公司最关键的战略转折点。团队意识到,虽然Avalonia UI很强大,但重写数百万行WPF代码对许多企业来说是不可能的。于是,他们开发了Avalonia XPF——一个与WPF二进制兼容的商业产品 19。商业逻辑

  :XPF是闭源且收费的。它利用了Avalonia的跨平台渲染引擎,但在上层完全模拟了WPF的API。企业无需重写代码,甚至无需重新编译部分依赖,就能将WPF应用运行在Linux和macOS上。这种“降维打击”不仅解决了企业的历史遗留问题,也为AvaloniaUI Oü提供了高利润率的标准化产品收入,从而有资金雇佣更多的核心开发者维护开源版Avalonia UI。

4.3 战略融资:Devolutions的300万赞助

  2025年,Avalonia宣布获得Devolutions提供的300万美元赞助 21。

非股权融资

  :这笔交易的关键在于它不是股权投资,而是“赞助”(Sponsorship)。Devolutions作为Avalonia的重度用户(其远程桌面管理软件基于Avalonia构建),需要确保这个框架的长期稳定和演进。

资金用途

  :这笔资金被指定用于改进文档、开发工具(Accelerate)以及提升核心框架的稳定性。对于Mike James来说,这是对其“不卖身”策略的最大肯定——通过证明技术的不可替代性,让生态中的受益者自愿为基础设施买单。

五 战略级产品:Avalonia XPF的技术护城河

  Avalonia XPF不仅仅是一个商业产品,它代表了Avalonia在技术架构上的极致灵活性,也是其区别于Qt、Flutter等竞争对手的最大护城河。

5.1 二进制兼容的魔法:如何实现WPF的跨平台

  WPF长期以来被认为是Windows独占的,因为它深度依赖DirectX和User32.dll。Avalonia XPF打破了这一神话。

架构替换

  :XPF通过替换WPF底层的PresentationCore和MilCore(WPF的渲染核心),将WPF的绘图指令重定向到Avalonia的Skia渲染后端 20。这意味着上层的WPF控件(Button, DataGrid等)并不“知道”自己运行在非Windows环境下。

第三方控件支持

  :这是XPF最恐怖的杀手锏。由于保持了API和二进制兼容性,XPF能够运行DevExpress、Telerik、Infragistics等第三方厂商的WPF控件库 20。这些控件库是企业级开发的基石,Qt完全无法触及这一领域(因为这些库是基于.NET的)。XPF使得Avalonia能够直接继承WPF二十年积累的庞大生态资产。

5.2 市场定位:收割WPF的存量市场

  Mike James将目光锁定在“WPF遗留资产迁移”这一特定的市场切片上。

典型客户

  :如施耐德电气、特斯拉、波音等公司,拥有海量的内部WPF工具。随着云计算和DevOps的普及,这些公司迫切需要将这些工具迁移到Linux容器中,或者让研发人员在macOS上使用这些工具。

成本对比

  :重写一个中型WPF应用可能需要数年时间和数百万美元。而购买XPF许可证并进行简单的适配(主要处理P/Invoke调用),成本仅为重写的几十分之一 26。这种巨大的ROI(投资回报率)使得XPF在企业市场极具吸引力。

5.3 许可模式的演变与争议

  XPF的推出并非一帆风顺,其许可模式经历了多次调整。

初期困惑

  :最初XPF采用“按应用、按平台”收费,导致计算复杂,且对于小微企业价格过高,引发了社区关于“Avalonia变得不再自由”的担忧 27。

简化与妥协

  :响应社区反馈,Mike James调整了策略,推出了包含所有桌面平台的单一许可证,并承诺核心框架永远开源 29。这种快速的市场响应机制体现了Avalonia作为创业公司的灵活性。

六 生态扩张:从桌面霸主到嵌入式新贵

  Avalonia UI的影响力已经超越了单纯的桌面开发,正在向嵌入式、Web及移动端全域渗透。

6.1 企业级桌面的统治力:JetBrains的背书

  在桌面端,Avalonia获得了一个里程碑式的胜利:JetBrains的背书。

IDE的UI基石

  :JetBrains在其著名的.NET性能分析工具dotMemory和dotTrace中使用了Avalonia 30。甚至其旗舰IDE Rider的某些各种跨平台视图也是基于Avalonia构建的。

象征意义

  :JetBrains作为全球最顶级的开发工具厂商,对UI框架的性能、稳定性和可扩展性有着极其苛刻的要求。他们的选择向全球开发者传递了一个强烈信号——Avalonia已经具备了支撑世界级复杂应用的能力。

6.2 嵌入式Linux的突围:挑战Qt的腹地

  嵌入式Linux一直是Qt的传统腹地,但Avalonia正在撕开缺口。

DRM (Direct Rendering Manager) 支持

  :Avalonia支持Linux DRM模式,这意味着它可以不依赖X11或Wayland桌面环境,直接在帧缓冲(Framebuffer)上渲染UI 32。

施耐德电气案例

  :施耐德选择Avalonia将其Harmony系列HMI(人机界面)迁移到Linux。原因在于C,使得在树莓派级别的硬件上也能实现流畅的、类似智能手机的触摸体验,且无需支付Qt高昂的运行时版税(Runtime Royalties)33。

性能优化

  :针对低功耗设备,Avalonia进行了大量优化,包括剪裁未使用的代码(Trimming)以减小包体积 34,以及通过SIMD指令集加速Skia的绘图操作。

6.3 移动端与Web的追赶:2025年的现状

  相比于桌面端的强势,Avalonia在移动端(iOS/Android)和Web(WebAssembly)仍处于追赶阶段 1。

移动端

  :v11版本带来了对iOS和Android的正式支持。Avalonia的优势在于“真·跨平台”——UI代码复用率可达99%,且外观完全一致。但在调用原生API(如摄像头、传感器)的便利性上,生态丰富度暂不如MAUI或React Native。

WebAssembly (WASM)

  :Avalonia支持将整个应用编译为WASM运行在浏览器中。虽然实现了“一套代码覆盖Web”,但WASM的加载体积(通常几十MB)和首屏启动速度仍是挑战。Google Play在2025年提出的16KB页面对齐要求等新标准,也迫使Avalonia团队持续优化底层内存布局 35。Qt也在WASM上发力 36,二者在Web端的竞争更多是关于二进制体积和启动速度的硬核比拼。

七 社区博弈与未来挑战:v12、Accelerate与开源的可持续性7.1 Avalonia Accelerate:生产力工具的商业化

  为了进一步增强盈利能力并补齐生态短板,Avalonia推出了Accelerate套件 37。

功能矩阵

  :包含高级的可视化设计器、WebView控件、高性能媒体播放器以及树形数据网格(TreeDataGrid)的增强版。

商业与开源的边界

  :这是一个敏感的领域。TreeDataGrid等组件原本是开源的,后来被归入Accelerate(尽管仍有免费版或许可变更),这在社区引发了关于“功能剥离”的争议 27。Mike James需要小心翼翼地平衡付费用户的特权与开源用户的权益,避免出现类似Redis或Elasticsearch的许可协议危机。

7.2 技术路线图:v12与未来十年

  面向2025年及以后,Avalonia的技术演进方向非常清晰:

GPU优先渲染(Impeller-like)

  :v12将引入新的渲染架构,旨在彻底解决Skia在极端场景下的性能瓶颈,利用GPU计算能力处理2D路径,为高刷新率屏幕提供极致流畅体验 7。

移动端成熟化

  :继续完善Android和iOS的平台集成,目标是让Avalonia成为.NET开发者构建“超级App”的首选,无论是在桌面还是移动端。

7.3 结论:后发者的逆袭逻辑

  回顾Mike James从Qt用户到Avalonia创造者的历程,我们看到的是一个经典的“后发者逆袭”故事。Avalonia没有Qt三十年的历史包袱,也没有微软MAUI那样的内部政治斗争。它利用了.NET Core的跨平台红利,结合了Skia的渲染优势,并通过XPF这一神来之笔解决了商业化难题。

  在2025年的技术版图中,Avalonia已不再仅仅是WPF的替代品,而是一个具备独立哲学、强大生态和自我造血能力的顶级UI框架。它向行业证明:在巨头林立的时代,一个由社区驱动、商业闭环的开源项目,依然能够凭借技术创新和精准的市场定位,开辟出一片属于自己的广阔天地。

  数据来源说明:本文基于截至2025年10月的公开资料、技术文档、博客文章及社区讨论整理而成。所有引用均已在文中标识。

引用的著作

      Episode 120 - Inside Avalonia's Cross-Platform UI Toolkit and the Quest for Quality Documentation with Mike James - The Modern .NET Show, 访问时间为 十二月 10, 2025,

      Avalonia (software framework) - Wikipedia, 访问时间为 十二月 10, 2025, (software_framework)

      About Avalonia UI, 访问时间为 十二月 10, 2025,

      10 years of Avalonia!, 访问时间为 十二月 10, 2025,

      Supporting Avalonia UI Growth - Seeking constructive feedback and suggestions , 访问时间为 十二月 10, 2025,

      Performance of QPainter - Qt Forum, 访问时间为 十二月 10, 2025,

      The Future of Avalonia's Rendering, 访问时间为 十二月 10, 2025,

      Avalonia vs .NET MAUI: the pragmatic choice for fast, unified .NET apps, 访问时间为 十二月 10, 2025,

      Avalonia Partnering with Google's Flutter Team to Bring Impeller Rendering to .NET, 访问时间为 十二月 10, 2025,

      Does large use of signals and slots affect application performance - Stack Overflow, 访问时间为 十二月 10, 2025,

      Improving Performance | Avalonia Docs, 访问时间为 十二月 10, 2025,

      Compiled Bindings - Avalonia Docs, 访问时间为 十二月 10, 2025,

      ReactiveUI not a cup of tea worth drinking Anything else with bad taste to never touch (again) : r/AvaloniaUI - Reddit, 访问时间为 十二月 10, 2025,

      greater/deeper use of Rx & observables · AvaloniaUI Avalonia · Discussion - GitHub, 访问时间为 十二月 10, 2025,

      Control Trees - Avalonia Docs, 访问时间为 十二月 10, 2025,

      UI Composition | Avalonia Docs, 访问时间为 十二月 10, 2025,

      What are your experiences with the various UI frameworks : r/csharp - Reddit, 访问时间为 十二月 10, 2025,

      How we make money - Avalonia UI, 访问时间为 十二月 10, 2025,

      AvaloniaUI/Avalonia: Develop Desktop, Embedded, Mobile and WebAssembly apps with C# and XAML. The most popular .NET UI client technology - GitHub, 访问时间为 十二月 10, 2025,

      Avalonia XPF - Take your WPF apps cross-platform., 访问时间为 十二月 10, 2025,

      Avalonia Accelerate Backed by $3 Million Deal from Devolutions - Press release - Devolutions, 访问时间为 十二月 10, 2025,

      Three-Year Sponsorship Accelerates Avalonia's Open-Source Roadmap, 访问时间为 十二月 10, 2025,

      .NET MAUI is Coming to Linux and the Browser, Powered by Avalonia - Avalonia UI, 访问时间为 十二月 10, 2025,

      Welcome | Avalonia Docs, 访问时间为 十二月 10, 2025,

      Introducing Hybrid XPF: Bridging Avalonia and WPF Controls, 访问时间为 十二月 10, 2025,

      Avalonia XPF, 访问时间为 十二月 10, 2025,

      Avalonia is getting less free (as in freedom, and as in price). - Reddit, 访问时间为 十二月 10, 2025,

      When will wpf be cross-platform · Issue · dotnet/wpf - GitHub, 访问时间为 十二月 10, 2025,

      Avalonia XPF - License Changes - Avalonia UI, 访问时间为 十二月 10, 2025,

      JetBrains Rider: The only cross-platform IDE for Avalonia, 访问时间为 十二月 10, 2025,

      Is AvaloniaUI good option for multiplatform GUI in 2024 : r/dotnet - Reddit, 访问时间为 十二月 10, 2025,

      What is the difference between Avalonia Linux DRM/embedded Linux/Android , 访问时间为 十二月 10, 2025,

      Unleashing .NET on Embedded Linux - Avalonia UI, 访问时间为 十二月 10, 2025,

      Welcome to the New Era of App Development: Introducing Avalonia v11, 访问时间为 十二月 10, 2025,

      Preparing Your Avalonia Apps for Android's 16 KB Page Size Requirement, 访问时间为 十二月 10, 2025,

      Qt and WebAssembly Takes Client Development Mainstream to the Web | , 访问时间为 十二月 10, 2025,

      Welcome to the Avalonia Accelerate Docs, 访问时间为 十二月 10, 2025,

      Avalonia Accelerate, 访问时间为 十二月 10, 2025,

      Avalonia Accelerate, 访问时间为 十二月 10, 2025,