WinUI3学习笔记(1)——FirstDesktopApp
随着Visual Studio 2019 16.10版本的正式发布,创建WinUI 3的APP对我们来说,已不存在任何的难度。本篇我们就试着来⼀探究竟,看看WinUI 3 APP到底是个啥玩意,能不能重振Windows桌⾯开发。
⾸先让我们把Visual Studio更新到16.10版本,16.10版本不仅全⾯⽀持热重载、实时可视化树和实时属性资源管理器。同时也不再需要修改Project⽂件,以修正 .NET SDK 和 winrt.runtime.dll 的版本不匹配的问题。
在Visual Studio 2019,让我们到Blank App, Packaged (WinUI 3 in Desktop)项⽬模板。如果发现没有该模板,则需要去以下地址下载安装。
Project Reunion - Visual Studio Marketplace
或者通过Visual Studio的Manage Extensions进⾏安装。
这⾥选择Packaged的Desktop项⽬,某软声明该类型的⼯程已可以⽤于⽣产环境。⽽For UWP的版本仍是preview阶段,⾄于⾮Packaged的Desktop项⽬,还要等到年底才能得到⽀持。需要注意的是,WinUI3 当前最低⽀持的Win10版本是1809,然后⽬标版本是2004。如果⼩伙伴们发现没有2004即Build19041的SDK可以选,证明你的Windows10需要升级了。
点击OK后,我们将成功创建第⼀个WinUI3的APP。打开解决⽅案管理器的话,默认的代码的结构如下图。整个解决⽅案下共有2个⼯程,作为主体的FirstWinUI3App,以及打包进商店⽤的FirstWinUI3App(Package)⼯程。看上去和之前DesktopBridge的打包⽅式极为相似,但是如果我们去检查Packages的话,会发现WinUI3引⽤的libraries都已经归属于ProjectReunion项⽬了。
检查FirstWinUI3App⼯程,app.manifest作为Windows APP的传统配置⽂件,⽀持的OS版本,要不要
管理员权限启动,都在这⾥定义,我们先不去管他。
App.xaml和MainWindow的组合,就是标准的WPF和UWP的开局。其中App.xaml会提供⼀个ResourceDictionary,来放置Application级别的资源。
<Application
x:Class="FirstWinUI3App.App"
xmlns="schemas.microsoft/winfx/2006/xaml/presentation"
xmlns:x="schemas.microsoft/winfx/2006/xaml"
xmlns:local="using:FirstWinUI3App">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls"/>
<!-- Other merged dictionaries here -->
</ResourceDictionary.MergedDictionaries>
<!-- Other app resources here -->
</ResourceDictionary>
</Application.Resources>
</Application>
⽽在App.xaml.cs中,因为该Desktop⼯程没有UWP中的Suspend和Resume等概念,就只overrid了OnLaunched⽅法,提供了⼀个类级别的Window对象。从这点来看Dekstop版本的WinUI 3⼯程,更像WPF。
MainWindow是⼀个标准的XAML Window对象,在App.xaml.cs的OnLaunched⽅法中实例化,然后Activate。
protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
m_window = new MainWindow();
m_window.Activate();
}
private Window m_window;
当然我们也可以抛开Window对象,像UWP⼀样通过Page开局。
protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
m_window = new Window();
var rootFrame = new Frame();
m_window.Content = rootFrame;
rootFrame.Navigate(typeof(BlankPage1));
windows开发平台m_window.Activate()
}
private Window m_window;
如果我们打开MainWindow.xaml⽂件,会发现命名空间依然和⼗年前如出⼀辙,可以认为XAML这套东西仍会在将来的很长⼀段时间内存在。我们切换到MainWindow.xaml.cs中,情况和WPF或UWP就稍有不同。命名空间由WPF的Syste.Windows和UWP的
Windows.UI.Xaml被统⼀为了Microsoft.UI.Xaml。这应该就是WinUI 3的使命,即统⼀今后Windows 桌⾯开发的UI。同时我也注意到,除了System这样的基础框架类库外(可以认为这部分与平台⽆关,⾪属于.NET 5),Win UI3对Windows runtime API的使⽤,已经切换到了Windows.Foundation这⼀命名空间下,与UWP保持⼀致。
如果忽略这些细节上的变动,那么可以认为WinUI 3的Desktop版,就是WPF+UWP混着写。⾄于流毒甚久的某软出⼀版框架,就要推倒重头学⼀次的说法,我个⼈表⽰完全是⽆稽之谈,⾄少从WPF,Sliverlight,UWP到WinUI 3都是平滑过渡。
下⾯转到FristWinUI3App(Package)⼯程,这个打包⼯程是⽤于将exe打包成MSIX结构的安装⽂件,上传到微软商店⽤的。以后如果⽀持⾮Package版的Desktop开发,该⼯程则不是必须的。
Dependencies下的Applications节点,包含被打包的FirstWinUI3App的引⽤,当然这个是⾃动添加的,不需要我们操⼼。Images节点下,包含了微软商店应⽤程序需要的各种尺⼨的图标和图⽚。
最后我们双击Package.appxmanifest⽂件,可以打开该⽂件对应的编辑器,⽤以声明APP的各种能⼒,设置图标,标注APP需要向⽤户申请的权限,以及打包的信息诸如发⾏商,APP名称等等。这⼀块的内容完全继承⾃UWP。
对WinUI 3的第⼀次探索到此就告⼀段落。后⾯我们会在Github上fork Xaml-Controls-Gallery这个repo,并切换到WinUI3分⽀,来进⼀步学习WinUI 3是怎么将现代化的UI带给Windows Desktop APP的。
本篇⽰例代码:
WinUI3Samples/WinUI3Samples/FirstWinUI3App at main · manupstairs/WinUI3Samples (github)
以下链接,是MS Learn上Windows开发的⼊门课程,单个课程三⼗分钟到60分钟不等,如需补充基础知识的同学点这⾥:
开始使⽤ Visual Studio 开发 Windows 10 应⽤
开发 Windows 10 应⽤程序
编写⾸个 Windows 10 应⽤
创建 Windows 10 应⽤的⽤户界⾯ (UI)
增强 Windows 10 应⽤的⽤户界⾯
在 Windows 10 应⽤中实现数据绑定
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论