一个基础的 C++WinRT Windows UI 库 2 示例 (UWP)
本主题详述如何向 C++/WinRT UWP 项目添加对 Windows UI 库 (WinUI) 的基础支持。 具体来说,本主题涉及适合 WinUI 2,它适合 UWP 应用。 对于桌面应用,存在 WinUI 3。 顺便一提,WinUI 本身是用 C++/WinRT 编写的。
重要
对于桌面应用,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)”项目模板创建新的 UWP 项目。 请确保使用的是“(C++/WinRT)”模板,而不是“(通用 Windows)”模板。
将新项目的名称设置为 HelloWinUICppWinRT,(使文件夹结构与此演练匹配),然后取消选中“将解决方案和项目放在同一目录中”。
安装 Microsoft.UI.Xaml NuGet 包
单击“项目”>“管理 NuGet 包...”>“浏览”,在搜索框中键入或粘贴“Microsoft.UI.Xaml”,在搜索结果中选择该项,然后单击“安装”,将包安装到项目中(还会看到许可协议提示)。 注意,只能安装 Microsoft.UI.Xaml 包,不要安装 Microsoft.UI.Xaml.Core.Direct。
声明 WinUI 应用程序资源
打开 App.xaml
,将以下标记粘贴到现有的起始和结束 Application 标记之间。
<Application.Resources>
<XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls"/>
</Application.Resources>
将 WinUI 控件添加到 MainPage
接下来,打开 MainPage.xaml
。 在现有的起始 Page 标记中,有一些 XML 命名空间声明。 添加 XML 命名空间声明 xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
。 然后,将以下标记粘贴到现有的起始和结束 Page 标记之间,覆盖现有的 StackPanel 元素。
<muxc:NavigationView PaneTitle="Welcome">
<TextBlock Text="Hello, World!" VerticalAlignment="Center" HorizontalAlignment="Center" Style="{StaticResource TitleTextBlockStyle}"/>
</muxc:NavigationView>
根据需要编辑 pch.h
将 NuGet 包(例如此前添加的 Microsoft.UI.Xaml 包)添加到某个 C++/WinRT 项目并生成该项目时,此工具会在项目的 \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 标记中。
现在可以生成并运行该项目了。