二、开始学习WinUI3.0

环境安装

对照文档:https://docs.microsoft.com/zh-cn/windows/apps/windows-app-sdk/set-up-your-development-environment?tabs=vs-2022-17-1-a%2Cvs-2022-17-1-b

我使用的vs 2022 17.2.6版本,我使用的是C# 注意下面的提示:

在安装对话框的“工作负载”选项卡上,根据需要选择:

  1. 对于使用 Windows 应用 SDK 的 C# 应用开发,请选择“.NET 桌面开发”。
    然后,在安装对话框的“安装详细信息”窗格中,选择“Windows 应用 SDK C# 模板”(位于列表底部)

  2. 在安装对话框的“单个组件”选项卡上,在“SDK、库和框架”部分,确保选择了“Windows 10 SDK (10.0.19041.0)”。
    c

创建第一个WinUI3项目

文档在在这里着重介绍了MSIX打包,确实挺好的,先熟悉打包会让我们先熟悉如何发布这个程序,但是对我来说我还不知道自己需要开发哪些东西,所以这一步我先跳过了。我先可以Debug就行;后面做App了在根据功能在重新回来学打包。

1. 创建解决方案选择Windows App SDK

按照上面的步骤安装完成后,就可以在新建项目中选择WinUI应用程序了;因为文档中先介绍的是单例,所以我把工程起名叫AppInstances

创建解决方案

创建项目后打开App.xaml可以看到资源文件的结构和WPF语法上是保持一致的,但是新增了XamlControlsResources;因为是初识WinUI3 所以这里我们保持原状,不做任何修改;

    <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>

打开App.xaml.cs文件

 public partial class App : Application
    {
        /// <summary>
        /// Initializes the singleton application object.  This is the first line of authored code
        /// executed, and as such is the logical equivalent of main() or WinMain().
        /// </summary>
        public App()
        {
            this.InitializeComponent();
        }

        /// <summary>
        /// Invoked when the application is launched normally by the end user.  Other entry points
        /// will be used such as when the application is launched to open a specific file.
        /// </summary>
        /// <param name="args">Details about the launch request and process.</param>
        protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
        {
            m_window = new MainWindow();
            m_window.Activate();
        }

        private Window m_window;
    }

相较于WPF和UWP,从代码上看这里更像UWP的OnLaunched,UWP中由各个方式启动的单例都在这里做。同时默认增加了一个m_windows;
在OnLaunched中实例化了MainWindow() 对象。并调用了Activate()方法;我们暂且不改任何代码;接下来看MainWindow;

<Window
    x:Class="AppInstances.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:AppInstances"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
        <Button x:Name="myButton" Click="myButton_Click">Click Me</Button>
    </StackPanel>
</Window>

在一个StackPanel面板中放了一个Button 然后触发myButton事件;
后台代码中包含一个触发Click事件后修改按钮显示文本。

        private void myButton_Click(object sender, RoutedEventArgs e)
        {
            myButton.Content = "Clicked";
        }

接下来运行程序时,我先按照文档提示的非 MSIX 打包办法,操作一通之后把我的工程搞坏了

  1. Unpackaged 启动方式直接闪退;appp构造函数都没进
  2. packaged报部署错误;未能读取清单:
    我退出VS,然后手动删除Bin和Obj目录在启动Packaged才可以了;

但是看了以下文档描述,我目前好像也不需要修改,毕竟只是入门:
修改以下项目属性会使自动初始化程序找到并加载最适合应用的 Windows 应用 SDK 版本。我没有修改这个设置

<WindowsPackageType>None</WindowsPackageType> 

如果有高级需求(例如自定义错误处理或加载特定版本的 Windows 应用 SDK),则可以改为显式调用引导程序 API。 有关详细信息,请参阅将 Windows 应用 SDK 运行时用于非 MSIX 打包应用教程 - 在使用 Windows 应用 SDK 的非 MSIX 打包应用中使用引导程序 API

因为我目前还不了解WinUI3 所以这个我就跳过了,

启动程序后,显示出了Button按钮,点击按钮也能正确触发后台事件;
第一个启动实例就这么多内容;
里面有个连接是关于单例应用的内容较多我们下一篇会写内容是:应用程序生命周期功能迁移
里面主要讲了几种应用中不同的单实例场景。

posted @ 2022-07-19 22:34  杜文龙  阅读(2427)  评论(0编辑  收藏  举报