命名空间Microsoft vs命名空间Windows

问题描述

我正在尝试Visual Studio中可用的C ++ / WinRT和WinUI模板。我对命名空间::winrt::Microsoft::winrt::Windows感到困惑。我只知道前一种,因为自动生成的回调函数使用了::winrt::Microsoft中的类型,并且由于我错误地从::winrt::Windows命名空间中传递了相同名称的类型而无法编译。我找不到有关::winrt::Microsoft的更多信息,甚至找不到官方文档。

据我所知,::winrt::Microsoft::winrt::Windows的命名类型大致相同,但是::winrt::Microsoft中缺少某些类型。例如,::winrt::Windows::UI::Colors::winrt::Microsoft::UI::Colors都存在,但是::winrt::Windows::UI::Color在Microsoft名称空间中没有“替代”。

问题:

  • 为什么我们有2个几乎相同但略有不同的名称空间?
  • 在哪种情况下我应该选择一个
  • 为什么::winrt::Microsoft缺少某些类型?

解决方法

Windows是原始名称空间,所有与UI相关的类型都驻留在其中。其中的一些类型是将WinUI从仅受UWP困扰的状态中“重塑”到Microsoft命名空间中的。

如果(新的)Microsoft名称空间中有可用的类型,请使用该类型。过渡尚未完成,因此缺少某些类型。