如何从 C++/WinRT 组件访问 Windows 命名空间?

How to access Windows namespace from C++/WinRT component?

我通过 Visual Studio 2019 创建了一个空白的 C++/WinRT 组件项目。

我将这一行添加到 Class.cpp:

    using namespace Windows::UI::Xaml::Controls;

给我这个错误:

Error   C2653   'Windows': is not a class or namespace name

这类似于 this question,只是问题是针对 C++/CX 的。

有什么想法吗?

整个 C++/WinRT 投影都位于 winrt 命名空间中。换句话说,Windows 运行时 'namespace' Windows.UI.Xaml.Controls 被投射到 winrt::Windows::UI::Xaml::Controls.

要访问该命名空间,请使用

using namespace winrt::Windows::UI::Xaml::Controls;

或者先将winrt命名空间合并到全局命名空间中:

using namespace winrt;
using namespace Windows::UI::Xaml::Controls;

一旦您继续将 WinUI 合并到您的应用程序中,任何一个都会让您非常头疼。由于在 winrt::Windows::UI::Xaml::Controlswinrt::Microsoft::UI::Xaml::Controls 命名空间下都出现了具有相同名称的类型,可怜的编译器迷失在歧义的海洋中。