为什么要学习 WinUI 3呢?

Winform 程序,简单、直接、快速;

Wpf 程序,丰富、多样、好看;

WinUI3 呢?据说它是前两者的升级版,比它们更酷炫,性能更好,而且跨平台,是技术的前沿。既然这么好,那不得不让人好奇地想去探索它了。


我的目标

希望新建一个最简单的程序,让它完整的跑起来。


这个目标对于 winform 和 wpf 来说就是几秒钟的事情,但是在WinUI 3,却遭遇了各种碰壁 编辑。


开发环境VS2022。

首先选择项目类型,“空白应用,已打包(桌面版中的 WinUI 3)” :




碰壁 1 :没有设计视图

创建完成后,打开主窗口xaml文件,竟然没有设计视图,这一点远不如WPF和Winform,但是xaml 代码看起来竟然和 wpf 一样,稍微多了一丁点安全感:


碰壁 2:编译报错

现在开始编译项目,竟然直接就不通过,出现了错误,刚开始就给了我下马威:



这个错误是因为 Windows App SDK (WinUI 3) 对 .NET SDK 版本有特定要求,需要为项目指定特定的Sdk版本,修改为如下图所示:



这时候,重新生成,成功了,转个圈圈庆祝一下

然后,准备以调试模式启动它:



欣慰的是,成功的看到了窗口正常启动了:



项目默认是 X86平台,如果需要调整为x64平台,需要调整以下两处即可:





此时,以 调试模式 和 直接运行模式 2个入口,都可以成功启动它:



看起来好像大功告成了,现在我们去软件的输出目录下,启动试试。


碰壁 3:exe无法启动

但是又悲剧了,输出目录下,直接运行 exe 竟然没有反应 :

216个文件:



原来在VS调试模式下,默认为这个项目是需要以MSIX打包方式来使用的, 当以非打包的方式直接去点开exe,结果就行不通。

于是修改项目的属性,让它以非打包的方式来启动,如下图所示:



很好,项目编译成功了,又很好,直接点 exe,可以成功启动了。

但是,目录下的文件竟然增加到了358个,太吓人了,我先假装没看见,暂时先容忍一下它:


碰壁 4 :exe 启动 和 调试运行 不可兼得

但是新问题又来了,这时候,在vs中以 调试运行 或 直接运行 都无法成功启动了:



好像二者不可兼得,真是神奇。我就先委屈一下吧,至少它在 开发模式 和 打包模式 下分别给出了可行的方案。


碰壁 5 :编译目录下文件数量奇多无比

现在有个非常大的问题。只是为了弹出一个click me,竟然编译目录下有300多个文件。 Click me的代价也太大了, 反观 wpf 的编译目录下,干净、利索、又清爽:



于是进行以下尝试,把项目打包为单文件,但是结果并没有让输出目录下的文件减少,因此放弃这种设置方案:



于是又进行以下尝试,把它指定为依赖系统的安装环境,来减少目录下携带的依赖文件,可是文件数量也没怎么变化,而且更关键的是,这时候启动报错了,提示缺少依赖环境,这样反而更麻烦了,所以也放弃了这种设置方案:





看来,系统默认的已经是按照最省心的、以及效率最高的方式来使用了,所以我们暂时先忍受一下它文件的杂乱,来继续看它的功能,因为软件发布之后会以部署包的形式,会把这一杂乱的现象屏蔽,我们先假定这里不是问题。

所以为了开发调试方便,以及启动性能最优,以及启动最省心,以下是我开发使用的项目配置:



以此为基础,从下篇开始,就可以对它的功能来进行探索了。

整体感受

与 winform 和 wpf 的简单方便的使用相比,WinUI 3 的首次接触可以算是 上刀山,下火海 了,希望后面的学习,它能呈现更多的惊艳,来补偿我此刻痛苦的感受。

我的第一个 WinUI 3 程序,遇到了 5 次碰壁的更多相关文章

  1. 手把手教你写一个RN小程序!

    时间过得真快,眨眼已经快3年了! 1.我的第一个App 还记得我14年初写的第一个iOS小程序,当时是给别人写的一个单机的相册,也是我开发的第一个完整的app,虽然功能挺少,但是耐不住心中的激动啊,现 ...

  2. 用c-free 5写一个入门的程序

    本文记录了在windows系统中使用C-FREE 5新建一个Hello HoverTree程序的步骤. 安装好C-Free 5之后,打开.新建一个工程: 附C-Free 5下载:http://hove ...

  3. 字符串混淆技术应用 设计一个字符串混淆程序 可混淆.NET程序集中的字符串

    关于字符串的研究,目前已经有两篇. 原理篇:字符串混淆技术在.NET程序保护中的应用及如何解密被混淆的字符串  实践篇:字符串反混淆实战 Dotfuscator 4.9 字符串加密技术应对策略 今天来 ...

  4. 第一个C语言程序

    从第一个C语言程序了解C语言 了解关键字 了解函数 注释 C语言的执行流程 标识符 C语言的学习重难点 从第一个C语言程序了解C语言 上图是一个在控制台上显示“Hello, World!”的C语言源代 ...

  5. 第六章第一个linux个程序:统计单词个数

    第六章第一个linux个程序:统计单词个数 从本章就开始激动人心的时刻——实战,去慢慢揭开linux神秘的面纱.本章的实例是统计一片文章或者一段文字中的单词个数.  第 1 步:建立 Linu x 驱 ...

  6. fir.im Weekly - 如何做一个出色的程序员

    做一个出色的程序员,困难而高尚.本期 fir.im Weekly 精选了一些实用的 iOS,Android 开发工具和源码分享,还有一些关于程序员的成长 Tips 和有意思有质量的线下活动~ How ...

  7. Java基础-接口中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产。请编写一个java应用程序描述上述的体制现象。 要求如下: (1)该应用程序中有一个“党中央”接口:CentralPartyCommittee,该接口中 有个“坚持党的领导”方法:void partyLeader() (2)该应用程序中有一个“国务院”抽象类:StateCouncil,

    36.中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产.请编写一个java应用程序描述上述的体制现象. 要求如下: (1)该应用程序中有一个“党中央”接口 ...

  8. Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。

    #29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类T ...

  9. java基础,继承类题目:编写一个Java应用程序,该程序包括3个类:Monkey类、People类和主类 E

    21.编写一个Java应用程序,该程序包括3个类:Monkey类.People类和主类 E.要求: (1) Monkey类中有个构造方法:Monkey (String s),并且有个public vo ...

  10. 【转载】ASP.NET MVC Web API 学习笔记---第一个Web API程序

    1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过 ...

随机推荐

  1. RealSense .bag文件彩色图,深度图提取

    RealSense .bag文件彩色图,深度图提取 代码 import roslib import rosbag import rospy import cv2 import os from sens ...

  2. 【SpringCloud】各种组件的更新情况

    关于Cloud各种组件的停更/升级/替换 由停更引发的"升级惨案" 停更不停用 被动修复bugs 不再接受合并请求 不再发布新版本 以前 now2020 服务注册中心 Eureka ...

  3. DHCP介绍与实现方法

    简介:动态主机配置协议(Dynamic Host Configuration Protocol,缩写:DHCP)是 RFC 1541(已被 RFC 2131 取代)定义的标准协议,该协议允许服务器向客 ...

  4. luaL_ref如何使用

    // main.lua中有个全局函数function gf() print("hello world")end// c++中处理void callgf(){ lua_getglob ...

  5. 【深度思考】自定义日期格式,为什么@JSONField生效,@JsonFormat不生效?

    1. 前言 最近在自测接口时,发现一个问题:字段类型定义的是Date,但接口返回值里却是时间戳(1744959978674), 而不是预期的2025-04-18 15:06:18. private D ...

  6. 原型设计工具Axure墨刀哪个好用?

    一.工具基础特性对比 Axure为本地化安装软件,支持离线操作且数据存储本地,安全性较高,但多端协作需通过云端同步,存在更新延迟:墨刀则为云端在线工具,通过浏览器即可使用,无需安装,便于多端协作与实时 ...

  7. 27.4K Star!这个LLM应用宝库让你秒变AI全栈高手,RAG和AI Agent一网打尽!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 想要快速入门LLM应用开发?想要了解最新的RAG和AI Agent技术?这个收获27.4K ...

  8. AD 侦查-MSRPC Over SMB

    本文通过 Google 翻译 AD Recon – MSRPC Over SMB (135/139/445) 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充. 导航 0 ...

  9. xshell远程连接出现WARNING! The remote SSH server rejected X11 forwarding request.

    解决办法: 编辑sshd配置文件 vi /etc/ssh/sshd_config 设置 X11Forwarding yes UserLogin no //原本的注释解开 yum install -y ...

  10. 【笔记】reko 0.10.2 反编译工具安装和使用记录|(2) 翻译 user‘s guide

    Reko user's guide Reko是一个二进制可执行文件的反编译器.它接受输入的一个或多个二进制可执行文件,然后反编译成高级语言.它可以在GUI shell中被交互地使用,作为一个命令行项目 ...