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的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库 ...
随机推荐
- 8.3 如何在Windows电脑安装Java开发环境(JDK)
下载 来到JDK官方下载界面,找到Java SE 8(简称JDK 8)后面的JDK下载,来到该界面,先同意协议,然后下载对应平台的JDK,我们这里下载Windows x64. 安装 双击安装就行了了, ...
- NC16430 [NOIP2016]蚯蚓
NC16430 [NOIP2016]蚯蚓 题目 题目描述 本题中,我们将用符号 \(\lfloor c \rfloor\) 表示对 c 向下取整,例如:\(\lfloor 3.0 \rfloor = ...
- Tapdata肖贝贝:实时数据引擎系列(三) - 流处理引擎对比
摘要:本文将选取市面上一些流计算框架包括 Flink .Spark .Hazelcast,从场景需求出发,在核心功能.资源与性能.用户体验.框架完整性.维护性等方面展开分析和测评,剖析实时数据框架 ...
- MISC 2022/4/21 刷题记录-千字文
1.千字文 得到名为png的无类型文件,010 Editor查看,png,改后缀,得到二维码 QR扫描,得到一句话"这里只有二维码" 思路不对,binwalk一下,发现有错误信息 ...
- html字符超长后自动隐藏
style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;"
- 基于 Hexo 从零开始搭建个人博客(二)
阅读本篇前,请先配置好相应的环境,请仔细阅读教程 基于 Hexo 从零开始搭建个人博客(一). 原文链接:基于 Hexo 从零开始搭建个人博客(二) 前言 博客搭建过程遇到任何问题,优先在本页面搜索, ...
- App Inventor拓展项目——钢琴游戏
本以为安卓只能写代码开发呢,结果安卓课程是这样一个图形化的开发方式,趣味性强一些吧.这里记录一下自己根据学习内容拓展的这个钢琴游戏. 先简要介绍一下 Android应用开发者(英语:App Inven ...
- [apue] 文件中的空洞
空洞的概念 linux 上普通文件的大小与占用空间是两个概念,前者表示文件中数据的长度,后者表示数据占用的磁盘空间,通常后者大于前者,因为需要一些额外的空间用来记录文件的某些统计信息或附加信息.以及切 ...
- docker + Umami + Postgresql 网站访问分析
1 # docker + Umami + Postgresql 2 # 官方安装文档:https://umami.is/docs/install 3 # 一.创建数据库 4 # 1.创建用户 5 CR ...
- Java8新特性: lambda 表达式介绍
一.lambda 表达式介绍 lambda 表达式是 Java 8 的一个新特性,可以取代大部分的匿名内部类,简化了匿名委托的使用,让你让代码更加简洁,优雅. 比较官方的定义是这样的: lambda ...