基础介绍

WinUI 3是本地UI平台组件,由NuGet包WindowsAppSDK(旧称Project Reunion)提供API及功能。 WindowsAppSDK提供了一组统一的API和工具,可用于创建桌面应用。
WindowsAppSDK正在快速迭代中,正以每半年一个大版本进行更新。
WinUI 3框架与微软其他桌面应用框架的异同一直是初学者最关心的问题:
与UWP的关系和区别
WinUI 3是UWP的直接继任者。是UWP框架的UI层(该层又称为WinUI2)解耦移植来的,旨在取代UWP。
所以可以看到WinUI 3和UWP的API,除了命名空间分别是Microsoft.UI.Xaml.*
和Windows.UI.Xaml.*
以外,其他部分几乎没有区别(所以当遇到WinUI 3问题而资料太少时,可以查询UWP相关问题)。
但UWP应用也并非可以无痛移植到WinUI 3,究其原因在于WinUI 3应用是Win32应用,而UWP是WinRT应用,所以Windows系统相关的API(如Window窗口API)有了很大变化,WinUI 3的API更新也更灵活。
UWP为了兼容XBOX等设备,并符合已死的Windows Phone等移动平台操作逻辑,将应用放入虚拟机容器中运行。
这使得UWP的权限十分低,并且生命周期管理也是不可控的,这是UWP相比和WinUI 3/WPF最大的劣势。
此外UWP已经没有重大更新了,而WinUI 3正日渐成为Windows的主要组成部分。所以如果还没有学习UWP框架并有想学的规划,则建议转向学习后继版本WinUI 3。
与WPF的关系和区别
WinUI 3与WPF并无直接继承关系。从源码语言则可以看出来,WinUI 3/UWP都是Windows团队开发的相关技术,而WPF是.NET团队开发的技术。
WPF作为已经存在了20多年的老牌知名框架,自然拥有无可比拟的庞大社区和十分稳定的框架。
而WinUI 3则相形见绌,不仅资料、市场都很少,而且WinUI 3还有很多内部bug(但相比之前已经修复了许多了)。
但WPF由于出现时间太早,也有许多问题导致其积重难返,如在XAML中大量使用反射导致UI运行缓慢,类型提示差,难以兼容AOT技术。使用Direct3D9导致渲染效率低下。
WinUI 3与WPF无直接继承关系,所以WPF也并没有被微软完全放弃。在.NET9的更新中,WPF还并入了wpfui样式库,使其可以使用类似于FluentUI的设计样式(但目前动画等效果离真正的FluentUI还差得远)。
总之WPF仍是追求稳定的开发者的不二选择,但如果追求更好的开发体验和最新的技术,WinUI 3十分值得一试。
异同
WinUI 3 | UWP/WinUI2 | WPF | |
---|---|---|---|
支持平台 | 🟡 Win10.0.17763.0及以上 | 🟡 Win10.0.10240.0及以上 | 🟢 WinXP及以上 |
DirectX版本 | 🟢 11 | 🟢 11 | 🟡 9 |
热重载 | 🟢 支持 | 🟢 支持 | 🟢 支持 |
AOT兼容 | 🟢 兼容 | 🟢 兼容 | 🔴 不兼容 |
触摸支持 | 🟢 支持 | 🟢 支持 | 🟡 支持较差 |
VS设计器 | 🔴 不支持 | 🟢 支持 | 🟢 支持 |
Rider支持 | 🔴 不支持 | 🟢 支持 | 🟢 支持 |
应用类型 | 🟢 Win32 | 🔴 虚拟机容器 | 🟢 Win32 |
维护状况 | 🟢 积极维护 | 🔴 已被迭代,低限度维护 | 🟡 低限度维护 |
源码语言 | C++/WinRT | C++/WinRT | C# |
MSIX打包 | 打包/不打包 | 打包 | 不打包 |
应用签名 | 打包时需要 | 需要 | 不需要 |
控件生命周期管理 | WinRT/COM | WinRT/COM | .NET GC |
系统交互技术 | WinRT为主,Win32为辅 | WinRT | Win32 |
COM线程模型 | STA | STA | STA |
WinUI 3的缺点
虽然本文是为了介绍安利WinUI 3,但也不能对缺点避而不谈误导读者。
- 作为新生框架,仍有许多bug存在,但每个版本都在尽力修复。
- 目前仍然没有设计器页面,也即只能脑内渲染,但可以界面简单的热重载。
- 由于其封送层(CsWinRT)编码缺陷,运行有些卡顿(可以自行下载WinUIGallery体验是否可以接受)。
- 继承了自Win8出现后一直未解决的内存泄漏问题,有时需要大量缜密地规划生命周期才能减少内存泄漏。
但作为当前微软主推的桌面应用框架,微软有许多资源倾斜,相信将来会越来越完善。
使用WinUI 3的知名项目

- Windows文件资源管理器(explorer.exe)
- Microsoft 照片
- PowerToys
- DevHome
- 手机连接
- Files
- AI-Dev-Gallery
- Windows11系统中其他的众多软件...