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的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库 ...
随机推荐
- js与java encodeURI 进行编码与解码
JS escape()使用转义序列替换某些字符来对字符串进行编码 JavaScript 中国 编码后 JavaScript %u4E2D%u56FD unescape()对使用 encodeUR ...
- 不是吧?30秒 就能学会一个python小技巧?!
大家好鸭!我是小熊猫 很多学习Python的朋友在项目实战中会遇到不少功能实现上的问题,有些问题并不是很难的问题,或者已经有了很好的方法来解决.当然,孰能生巧,当我们代码熟练了,自然就能总结一些好用的 ...
- 挑战30天写操作系统-day2-汇编语言学习与Makefile入门
1.介绍文本编辑器 这里,我们直接采用自己windows电脑自带的文本编辑器即可以完成制作要求 2.继续开发 下面先是对昨天使用的helloos.nas文件内容进行详细解释 ; hello-os ; ...
- 牛客SQL刷题第一趴——非技术入门基础篇
user_profile表: id device_id gender age university province 1 2138 male 21 北京大学 Beijing 2 3214 male ...
- 2022-7-13 java_1 第七组 刘昀航
@ 目录 前言 一.一些基本的指令 二.java 1.java的三个版本 2.java特点 3.运行一个java程序 三.java的数据类型 1.java基本数据类型 2.强制转换的原理 3.八种基本 ...
- [SWPU2019]Web1-1|SQL注入
1.打开之后界面如下: 2.查看源代码.登录注入等未发现有用信息,结果如下: 3.进行注册试试,注册时发现admin账户已被注册,随便注册一个账户并登录,结果如下: 申请发布广告页面如下: 4.发布广 ...
- jenkins多分支构建选择
通常开发提交到git上的代码会有多个分支,比如master分支.release分支等,少则1.2个,多则10几20几个:当构建的时候,如果不配置多分支构建,每构建一个新的分支,就需要修改配置,如果没有 ...
- 一个小 Trick
平方变两次 一个状态 \(S\) 有一个贡献,所有状态 \(S\) 组成集合 \(U\) . 然后我们要统计下面这个东西 \[ans=\sum_{S\in U}f^2(S) \] 然后我们就可以看作是 ...
- Odoo14 ir.rule 中的domain查询语句
# ir.rule 中的domain查询语句 # 当你的字段是many2one.many2many.one2many的时候domain都会强制加上过滤域 # tree显示的时候也会过滤 # m.mod ...
- 技术分享 | 在GreatDB分布式部署模式中使用Chaos Mesh做混沌测试
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 1. 需求背景与万里安全数据库软件GreatDB分布式部署模式介绍 1.1 需求背景 混沌测试是检测分布式系统不确定性.建 ...