0%

WinUI 3——从入门到放弃

WinUI 3框架更像是Windows11下的UWP 2.0,加入了Win32 API的支持,设计语言和Windows11一致。

程序可以在Windows10 1809及以上的版本运行,不支持Windows 7。最尴尬的一点是微软还是鼓励大家通过Windows Store分发。侧加载用的MSIX包,需要用自己的密钥进行签名,同时把证书加入根证书才能安装,非常麻烦。

新建项目

首先第一步先给VS安装下WinUI 3的拓展包,参考安装适用于 Windows 应用 SDK 的工具

然后可以开始创建WinUI 3的项目了,参考创建你的第一个 WinUI 3 项目。新建项目选择下面这个。

创建项目

进去之后记得点击配置管理器,把deploy勾上,不然会报错。

点击配置管理器

增加部署配置

运行的时候可能会跳转到设置的开发者选项,记得允许任意源安装。

打开开发人员模式

项目打包和安装

这里选择生成MSIX的打包方式,exe打包貌似只支持控制台应用😅。

官方的发布指南。其中签名非常重要,不然无法在电脑上安装。

还一个签名方式是修改打包清单。首先点击Package.appxmanifest,然后在打包中选择证书,没有就新建一个。

找到打包清单

选择证书

然后点击上方的生成——打包,打包的位置下面会显示。

打包

生成文件夹

打开生成文件夹,会发现有cer证书和msix安装包。点击证书,然后安装证书,选择本地计算机,然后选择储存地点为——受信任的根证书颁发机构,不要选自动储存。

证书和安装包

安装好证书后就可以点击msix安装包安装了。吐槽下,这里的button显示还有点问题,阿三搞的UI真的是一言难尽。

安装

大概解释下为啥要安装证书,首先电脑里是没有我APP的证书,那么系统就会阻止安装。如果是走微软商店分发的话就会用微软自己的证书签名,电脑里面内置了微软的证书,安装起来就没问题。这个侧加载的功能适合用于公司内部的软件分发,只要把证书统一安装到电脑中就行。但对于个人开发者而言基本上只能走微软商店了,毕竟一台一台电脑装证书还是比较麻烦🙃。

参考资料

  1. 用 WinUI 3 开发了一个摸鱼应用 – dino chan的文章 – 知乎
  2. 一个UWP的demo仓库,学起来比看微软官方的略混乱的文档快

踩坑

JPG图片导入默认不显示

jpg的图片导入后要手动设置为内容才能显示,貌似是防病毒的设置。参考issue

点击图片,然后设置生成操作为内容。

安装

报错模糊

style忘记定义了,然后只会丢出xaml parsing failed。debug困难算是xml排版的通病了,不过Android Studio还是做的好一点,缺啥都会提示到位置🤡。

多Page跳转

WinUI 3相比UWP支持了多个Window,所以默认会新建一个MainWindow,而UWP由于默认只有一个Window,默认提供一个MainPage。

多Page跳转的参考:

  1. 微软UWP导航教程,API都还没切换到WinUI 3(囧)。
  2. 另一个简介版本。大体思路就是在Window中加入一个Frame,然后把Page塞到Frame中,切换Frame中的Page实现跳转。UWP是Window.Current.Content找到rootFrame;WinUI 3调用Window.Current.Conent会报空指针异常(大囧),需要自己加Frame。跳转动画还是比较流畅的,看起来很舒服。但这个办法还有个问题,就是Frame加载Page会卡大概0.5秒,在UWP中是默认显示Logo,Page加载好才显示(特大囧)。

打印调试

和UWP一样,导入System.Diagnostics库,然后使用Debug.Writeline(xxx),会显示在右下角的输出中。

安装

吐槽

这种低完成度的桌面客户端基本上可以绕着走了,不如去卷前端,框架多的很,除非是非要用特定的设备,比如USB、蓝牙或者串口这类的。要真的做客户端玩安卓或者iOS也比这个强🤣。

微软还在折腾一个开源的跨平台UI框架叫MAUI,Windows部分就是WinUI。目前还在预览中,今年只有candidate release。最可惜的是不支持Linux,使得这个跨平台框架的意义不大了,选Flutter或者Electron都比这个强。