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 2WinUI 3 两个版本,内容差不多,我觉得 WinUI 2 版的比较好用。

Character Map UWP

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

参考

WinUI 3 踩坑记:前言的更多相关文章

  1. WinUI 3 踩坑记:第一个窗口

    本文是 WinUI 3 踩坑记 的一部分,该系列发布于 GitHub@Scighost/WinUI3Keng,文中的代码也在此仓库中,若内容出现冲突以 GitHub 上的为准. WinUI 3 应用的 ...

  2. WinUI 3 踩坑记:从创建项目到发布

    本文是 WinUI 3 踩坑记 的一部分,该系列发布于 GitHub@Scighost/WinUI3Keng,若内容出现冲突以 GitHub 上的为准. 创建项目 现在 WinUI 3 的入门体验比刚 ...

  3. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  4. Spark踩坑记——数据库(Hbase+Mysql)

    [TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...

  5. 【踩坑记】从HybridApp到ReactNative

    前言 随着移动互联网的兴起,Webapp开始大行其道.大概在15年下半年的时候我接触到了HybridApp.因为当时还没毕业嘛,所以并不清楚自己未来的方向,所以就投入了HybridApp的怀抱. Hy ...

  6. Spark踩坑记——共享变量

    [TOC] 前言 Spark踩坑记--初试 Spark踩坑记--数据库(Hbase+Mysql) Spark踩坑记--Spark Streaming+kafka应用及调优 在前面总结的几篇spark踩 ...

  7. Spark踩坑记——从RDD看集群调度

    [TOC] 前言 在Spark的使用中,性能的调优配置过程中,查阅了很多资料,之前自己总结过两篇小博文Spark踩坑记--初试和Spark踩坑记--数据库(Hbase+Mysql),第一篇概况的归纳了 ...

  8. [转]Spark 踩坑记:数据库(Hbase+Mysql)

    https://cloud.tencent.com/developer/article/1004820 Spark 踩坑记:数据库(Hbase+Mysql) 前言 在使用Spark Streaming ...

  9. Spark踩坑记——数据库(Hbase+Mysql)转

    转自:http://www.cnblogs.com/xlturing/p/spark.html 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库 ...

随机推荐

  1. 使用EasyExcel导出图片及异常处理

    1.使用String类型导出   定义自己的Converter,不使用默认的StringImageConverter 如果图片路径为空或者图片路径是错误的,返回相应的内容 import java.io ...

  2. Contest

    Contest 题目 链接 题目描述 \(n\) 支队伍一共参加了三场比赛. 一支队伍 \(x\) 认为自己比另一支队伍 \(y\) 强当且仅当 \(x\) 在至少一场比赛中比 \(y\) 的排名高. ...

  3. 腾讯云原生数据库TDSQL-C入选信通院《云原生产品目录》

    近日,中国信通院.云计算开源产业联盟正式对外发布<云原生产品目录>,腾讯云原生数据库TDSQL-C凭借其超强性能.极致效率的弹性伸缩和完善的产品化解决方案体系,成功入围目录. 全球数字经济 ...

  4. Git的历史和安装Git及环境配置

    Git历史同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代. Linux 内核开源项目有着为数众广的参与者.绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务 ...

  5. 4-5 Spring Boot

    1. 关于Spring Boot Spring Boot是Spring官方的一个产品,其本质上是一个基于Maven的.以Spring框架作为基础的进阶框架,很好的支持了主流的其它框架,并默认完成了许多 ...

  6. 基于ABP实现DDD--仓储实践

      由于软件系统中可能有着不同的数据库,不同的ORM,仓储思想的本质是解耦它们.在ABP中具体的实现仓储接口定义在领域层,实现在基础设施层.仓储接口被领域层(比如领域服务)和应用层用来访问数据库,操作 ...

  7. 基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现

    摘要:本实验主要是以基于Caffe ResNet-50网络实现图片分类(仅推理)为例,学习如何在已经具备预训练模型的情况下,将该模型部署到昇腾AI处理器上进行推理. 本文分享自华为云社区<[CA ...

  8. 2022-7-20 第七组 pan小堂 String

    字符串 String 字符串部分方法 字符串对象的特点: 1.Java程序中所有双引号引起来的内容,都是String类的对象 2.字符串内容不可变,它们的值在创建后不能被更改(在底层被final修饰, ...

  9. linux docker .net core 从建立网站到预览

    docker的安装在网上一搜一大把,windows安装的就是exe双击,linux安装需要执行语句 ps:需要准备xftp.xshell.vs 2019.linux服务器.docker账号密码 例如: ...

  10. css基础02

    熟练快捷键!方便,要多练!  css复合选择器 不会选孙子,有一个儿子和另一个儿子的孩子(也是孙子)同名了,但子选择器子选择儿子,同名的孙子不选.和后代选择器有一点不一样的. " ,&quo ...