WinUI 3 踩坑记:前言
WinUI 3 (Windows App SDK 于 2021 年 11 月发布了第一个正式版 v1.0.0 [1],最新版本是 v1.1.5 [2]。我的基于 WinUI 3 的个人项目 寻空 从年初开始开发 [3],完整经历了 WinUI 3 的各个版本,见证了从 Bug 满天飞到逐渐完善的全过程。
现在 WinUI 3 趋于稳定,处于可以一用的状态,我也想把开发寻空过程中遇到的有趣的内容分享给大家,系列名就叫 WinUI 3 踩坑记 好了。个人水平有限,文章中难免会出现错误,请各位读者批评指正。
WinUI 3 是什么
WinUI 3 是 Windows App SDK 内的本机 UI 平台组件,那这个 Windows App SDK 又是什么东西,和 Windows SDK 有什么关系,是不是改名部的新操作?
按照微软的文档所说,Windows App SDK 是一组新的开发人员组件和工具,它们代表着 Windows 应用开发平台的下一步发展方向,Windows App SDK 不会代替 Windows SDK 或现有桌面 Windows 应用类型(比如 WinForm、WPF、Win32),而是使用一组通用 API 来补充这些现有工具和应用类型,开发人员可以在这些平台上依赖这些 API 来执行操作 [4]。
微软的文档真不讲人话, 简单来说,WinUI 3 是 Windows 平台最新一代本机应用开发框架,继承了 UWP 的设计语言和 Win32 的运行方式,同时结合了两者的优点,但是也带来了只能跑在 Windows 10 1809 (17763) 及以上版本的限制。
WinUI 3 的优缺点
以下内容总结自我个人的开发体验,仅为一家之言。
优点
- 颜值高。 我选择 WinUI 3 的最重要的原因就是外观,WinUI 3 使用了和 UWP 相同的 UI 框架,完美实现了 Fluent Design 设计语言,控件自带动画效果,也能够使用亚克力和云母材质,适合我这种没有 UI 设计能力的。
- 性能好。 .NET 6 的性能毋庸置疑。
- 权限高。 WinUI 3 本质上是一个 Win32 应用,没有了 UWP 中严格的权限限制,可以放开手脚随便来。
缺点
- 开发体验差。 到现在还没有设计器,只能对着一个 XAML 文件空写,为此我已经练就了一套脑内渲染本领。其次是编译速度慢,真的非常慢。
- 安装包体积大。 发布 WinUI 3 项目必须包含 .NET 运行时,并且暂时还不支持剪裁,一个禁用 ReadyToRun 编译的 WinUI 3 空项目安装包就有 40.6 MB,启用 ReadyToRun 后更是膨胀到 51.5 MB。(Windows App SDK v1.1.4 x64)
- 互操作性能差。 .NET 6 的性能确实毋庸置疑,但是 WinUI 是一个 Native 框架,对控件依赖属性的读写需要通过 CsWinRT 互操作,经过测试要比 WPF 要慢很多 [5]。
- 生态差。 WinUI 3 正式发布不到一年,第三方控件还很少,大部分情况下需要自己写控件。
安装包体积大和互操作性能差仅对于 C# 而言,C++ 开发的 WinUI 3 应用没有这些问题。
总的来说,WinUI 3 是一个未来可期的框架,既有颜值也有体验(当然不是指开发体验)。但是 WinUI 3 本身很难开发高性能的生产力软件,这注定了它不太可能在大型商业软件领域有所作为。而在更广阔的娱乐或工具应用中,WinUI 3 可能会成为一部分新项目的选择,比如 爱奇艺 Preview 。WinUI 3 的未来到底如何,我们拭目以待。
关于本系列
- WinUI 3 踩坑记 不是完整的系列教程,只是和 WinUI 3 相关随笔的合集
- 本系列默认读者了解
- C# 11 和 XAML 的语法
- .NET 6 Runtime API
- WinUI 控件和 WinRT API
- Win32 窗口相关知识
- 若无特殊说明,本系列文章中代码依赖的环境为
Windows 11 22H2 (22621) x64,C# 11 (.NET 6),Windows App SDK v1.1.5 - 系列的所有文章和代码都存档于 GitHub@Scighost/WinUI3Keng,若内容出现冲突以 GitHub 上的为准
开发工具
除了在 Visual Studio 中必装的负载以外,推荐几个提升效率的工具。
Microsoft UI Xaml
WinUI 控件样式源码,这算是必看内容之一。开发中遇到的一些问题,比如 NavigationView 的背景色怎么修改, CheckBox 为什么这么宽, 怎么去掉 ListView 选中时的效果 这些问题都可以通过修改控件样式来解决。
Windows Community Toolkit Sample App
社区工具箱,开发 WinUI 基本离不开这个东西。
WinUI Gallery
这是官方的控件展示,WinUI 的所有自带的控件都能在里面找到用法。有 WinUI 2 和 WinUI 3 两个版本,内容差不多,我觉得 WinUI 2 版的比较好用。

Character Map UWP
字符映射表,一个查看和搜索字体字符的工具。开发过程中经常要查找一些字体图标,在这个应用中都能很方便地找到,还能直接复制生成的代码。

参考
- [1] Windows App SDK v1.0.0
- [2] Windows App SDK v1.1.5
- [3] Xunkong: First commit
- [4] Windows App SDK Document
- [5] Discussion: Dependency property is much slower in WinUI 3 than in WPF
WinUI 3 踩坑记:前言的更多相关文章
- WinUI 3 踩坑记:第一个窗口
本文是 WinUI 3 踩坑记 的一部分,该系列发布于 GitHub@Scighost/WinUI3Keng,文中的代码也在此仓库中,若内容出现冲突以 GitHub 上的为准. WinUI 3 应用的 ...
- WinUI 3 踩坑记:从创建项目到发布
本文是 WinUI 3 踩坑记 的一部分,该系列发布于 GitHub@Scighost/WinUI3Keng,若内容出现冲突以 GitHub 上的为准. 创建项目 现在 WinUI 3 的入门体验比刚 ...
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- Spark踩坑记——数据库(Hbase+Mysql)
[TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...
- 【踩坑记】从HybridApp到ReactNative
前言 随着移动互联网的兴起,Webapp开始大行其道.大概在15年下半年的时候我接触到了HybridApp.因为当时还没毕业嘛,所以并不清楚自己未来的方向,所以就投入了HybridApp的怀抱. Hy ...
- Spark踩坑记——共享变量
[TOC] 前言 Spark踩坑记--初试 Spark踩坑记--数据库(Hbase+Mysql) Spark踩坑记--Spark Streaming+kafka应用及调优 在前面总结的几篇spark踩 ...
- Spark踩坑记——从RDD看集群调度
[TOC] 前言 在Spark的使用中,性能的调优配置过程中,查阅了很多资料,之前自己总结过两篇小博文Spark踩坑记--初试和Spark踩坑记--数据库(Hbase+Mysql),第一篇概况的归纳了 ...
- [转]Spark 踩坑记:数据库(Hbase+Mysql)
https://cloud.tencent.com/developer/article/1004820 Spark 踩坑记:数据库(Hbase+Mysql) 前言 在使用Spark Streaming ...
- Spark踩坑记——数据库(Hbase+Mysql)转
转自:http://www.cnblogs.com/xlturing/p/spark.html 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库 ...
随机推荐
- 细说GaussDB(DWS)复杂多样的资源负载管理手段
摘要:对于如此多的管控功能,管控起来实际的效果到底如何,本篇文章就基于当前最新版本,进行效果实测,并进行一定的分析说明. 本文分享自华为云社区<GaussDB(DWS) 资源负载管理:并发管控以 ...
- ShardingSphere-proxy-5.0.0企业级分库分表、读写分离、负载均衡、雪花算法、取模算法整合(八)
一.简要说明 以下配置实现了: 1.分库分表 2.每一个分库的读写分离 3.读库负载均衡算法 4.雪花算法,生成唯一id 5.字段取模 二.配置项 # # Licensed to the Apache ...
- 记一次重复造轮子(Obsidian 插件设置说明汉化)
杂谈 #Java脚本 因本人英语不好在使用Obsidian时,一些插件的设置英文多令人头痛.故有写一个的翻译插件介绍和设置脚本的想法.看到有些前人写的一下翻译方法,简直惨目忍睹.竟然要手动.这个应该写 ...
- labview从入门到出家1--第一个加法程序
概述: Labview在众多编程语言中排名靠后,显然在当今互联网,物联网时代并非主流语言.但是俗话说行行 出状元,即便不是立身于某个主流的领域,用好了依旧可以独领风骚,而且Labview对于硬件出身的 ...
- elasticsearchTemplate that could not be found
***************************APPLICATION FAILED TO START*************************** Description: Metho ...
- 报告指SpaceX估值已达到1000亿美元,埃隆马斯克以此回击其接受政府补贴的批判
SpaceX首席执行官埃隆-马斯克(Elon Musk)表示,名下的航天发射服务供应商市值已达到1000亿美元.该金额是根据上个月的评估报告确认的,标志着SpaceX在完成最新一轮融资,并筹集超过10 ...
- Elasticsearch的cmd窗口乱码问题(windows)
elasticsearch 7.6.0 windows版日志乱码问题解决 修改jvm.options,如何重启es即可 新增 -Dfile.encoding=GBK
- python通过CMD直接生成exe文件
py文件打包好为exe文件: pyinstaller -F --icon=my.ico test.py my.ico 是一个图标名,和当前的test.py文件在同一个目录下 常用参数说明: –icon ...
- 痞子衡嵌入式:聊聊i.MXRT1170双核下不同GPIO组的访问以及中断设计
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1170双核下不同GPIO组的访问以及中断设计. 在双核 i.MXRT1170 下设计应用程序,有一个比较重要的考虑点就是外 ...
- Docker 06 部署Nginx
参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...