一个基本的 C++/WinRT Windows UI 库 2 示例(UWP)

本主题指导你完成将Windows UI 库(WinUI)的基本支持添加到 C++/WinRT UWP 项目的过程。 具体而言,本主题介绍适用于 UWP 应用的 WinUI 2。 对于桌面应用,有 WinUI 3。 顺便说一句,WinUI 本身是用 C++/WinRT 编写的。

Important

对于桌面应用,Windows 应用 SDK提供 Windows UI 库 (WinUI) 3。 WinUI 3 并非设计用于配合本主题中的演练使用,因为该演练面向 UWP。 另请参阅从 UWP 迁移到Windows 应用 SDK

注释

Windows UI 库 (WinUI) 工具包可用作 NuGet 包,可以使用 Visual Studio 添加到任何现有项目或新项目,如本主题中所示。 有关更多背景、设置和支持信息,请参阅Windows UI 库入门

创建空白应用 (HelloWinUICppWinRT)

在Visual Studio中,使用空白应用(C++/WinRT)项目模板(对于 WinUI 3 桌面应用,使用空白应用,打包(桌面中的 WinUI 3)模板创建新的 UWP 项目。 请确保使用的是 (C++/WinRT) 模板,而不是 (通用Windows) 模板。

将新项目的名称设置为 HelloWinUICppWinRT,然后取消选中 将解决方案和项目放在同一目录中(这样文件夹结构就会与演练保持一致)。

安装Microsoft。Ui。Xaml NuGet 包

单击Project>管理 NuGet 程序包...>浏览,在搜索框中键入或粘贴Microsoft.UI.Xaml,在搜索结果中选择该项,然后单击安装将该程序包安装到你的项目中(你还会看到许可协议提示)。 请谨慎安装Microsoft。Ui。Xaml 包,而不是Microsoft。Ui。Xaml.Core.Direct

声明 WinUI 应用程序资源

在现有打开和关闭App.xaml标记之间打开并粘贴以下标记。

<Application.Resources>
    <XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls"/>
</Application.Resources>

将 WinUI 控件添加到 MainPage

接下来,打开 MainPage.xaml。 在现有的打开 标记中,有一些 xml 命名空间声明。 添加 xml 命名空间声明 xmlns:muxc="using:Microsoft.UI.Xaml.Controls"。 然后,在现有开始标记和结束 标记之间粘贴以下标记,覆盖现有的 StackPanel 元素。

<muxc:NavigationView PaneTitle="Welcome">
    <TextBlock Text="Hello, World!" VerticalAlignment="Center" HorizontalAlignment="Center" Style="{StaticResource TitleTextBlockStyle}"/>
</muxc:NavigationView>

根据需要编辑 pch.h

当你将 NuGet 包添加到 C++/WinRT 项目中时(例如你之前添加的 Microsoft.UI.Xaml 包),并生成该项目,工具链会在项目的 \Generated Files\winrt 文件夹中生成一组投影头文件。 如果已按照演练操作,则现在将拥有一个 \HelloWinUICppWinRT\HelloWinUICppWinRT\Generated Files\winrt 文件夹。 若要将这些头文件加入到项目中,以便对这些新类型的引用能够得到解析,可以在预编译头文件(通常为 pch.h)中包含它们。

只需包含与所使用的类型对应的标头。 但这里有一个示例,其中包含了 Microsoft.UI.Xaml 包的所有生成的头文件。

// pch.h
...
#include "winrt/Microsoft.UI.Xaml.Automation.Peers.h"
#include "winrt/Microsoft.UI.Xaml.Controls.h"
#include "winrt/Microsoft.UI.Xaml.Controls.Primitives.h"
#include "winrt/Microsoft.UI.Xaml.Media.h"
#include "winrt/Microsoft.UI.Xaml.XamlTypeInfo.h"
...

编辑MainPage.cpp

MainPage.cpp中,删除 MainPage::ClickHandler 实现中的代码,因为 myButton 不再位于 XAML 标记中。

现在可以生成并运行项目。

简单 C++/WinRT Windows UI 库屏幕截图