如何在Visual Studio的C ++ / WinRT中添加新的XAML“页面”及其关联的代码隐藏文件?

时间:2019-07-16 19:40:45

标签: visual-studio xaml winrt-xaml c++-winrt

有许多相关问题可以提示如何正确地向Visual Studio中的WinRT / C ++项目中添加新的XAML Page ,但是没有一个特定于C ++ / WinRT。 (即hereherehere。)

此外,尽管WinRT / C ++是对C ++ / CX的重大改进(我认为),但是几乎所有Microsoft文档都使用C#或C ++ / CX作为示例。

更糟糕的是,自发布之日起,当您使用Visual Studio中的“添加项目”功能添加XAML Page时,它将在C ++ / CX中创建页面甚至适用于WinRT / C ++项目。

最后,(到目前为止)微软没有提供任何有关如何向WinRT / C ++项目中添加新XAML Page的文档,至少我可以找到(请参阅第一段)。 / p>

gh。

为了节省其他人的时间,我整理了提示,并成功地向Visual Studio WinRT / C ++项目中正确添加了新的XAML Page

我问并回答了一个问题:如何在Visual Studio的WinRT / C ++项目中添加新的XAML Page


附录

我错过了明显的事情!事实证明,您可以使用Visual Studio轻松添加WinRT / C ++ XAML Page。尽管尽我所能(仔细)看。

(简单)正确的答案在答案2中给出。

但是我会继续回答这个问题-以防万一其他人误入歧途,并且找不到在WinRT / C ++中添加XAML Page的选项在Visual Studio中。

2 个答案:

答案 0 :(得分:1)

我错过了明显的事情!

事实证明,您可以使用Visual Studio轻松地添加WinRT / C ++ XAML页面。

尽管尽我所能(仔细地)仔细地研究了Visual Studio编辑器中的选项,但我错过了WinRT / C ++项目的XAML模板的位置。

为了完整起见,我将粘贴屏幕截图。


这里是如何向现有WinRT / C ++项目中添加新的XAML Page,详细说明了这一点。

步骤1 :右键单击解决方案,然后浏览菜单/子菜单至Add New Item...

enter image description here

不要选择XAML节点。

...保持选中的ROOT NODE:

enter image description here

如果在Add New Item...条目中选择“ XAML”节点,则外观如下:

enter image description here


底线

我损失了几个小时,因为我认为在Add New Item...对话框中单击“ XAML”节点是一个好主意,以便仅过滤与XAML相关的模板。

不幸的是,该组件的WinRT / C ++版本的XAML模板没有出现在该列表中(截至我撰写本文之日)。您必须单击根节点才能看到它。

如果对任何人有用,我将保留其他答案。

但是此答案描述了向WinRT / C ++项目中添加新XAML Page的(简单)正确方法-如预期那样,使用Visual Studio编辑器Add New Item...

答案 1 :(得分:0)

为了节省其他人的时间,我整理了提示,并成功地向Visual Studio WinRT / C ++项目中正确添加了新的XAML Page

这是答案。

图片价值数千个单词,所以这里是步骤。

  • 在Visual Studio中保存并关闭您的项目
  • 在文本编辑器中手动打开.vcxproj.vcxproj.filters文件

enter image description here

  • 假设我们已经有了默认页面MainPage.xaml及其关联的.idl和代码隐藏文件。在以下步骤中,我们将创建一个新的XAML页面及其关联文件,名为LoginPage
  • 还不需要为LoginPage实际创建文件-我们将在最后的步骤中完成。只需暂时编辑.vcxproj.vcxproj.filters文件。
  • 在这两个文件中,我们将复制每个包含对MainPage的引用的块,并将其修改为读取LoginPage
  • 首先编辑.vcxproj文件

enter image description here

第1块LoginPage.cpp-LoginPage.xaml关系的代码隐藏依赖项

我们从这里开始:

enter image description here

...修改块以为LoginPage添加一个部分,结果是:

enter image description here

第2块LoginPage.h-LoginPage.xaml关系的代码隐藏依赖项

我们从这里开始:

enter image description here

...修改块以为LoginPage添加一个部分,结果是:

enter image description here

第3块:让Visual Studio知道将设计器用于LoginPage.xaml(我认为!)

我们从这里开始:

enter image description here

...修改块以为LoginPage添加一个部分,结果是:

enter image description here

第2块LoginPage.idl-LoginPage.xaml关系的代码隐藏依赖项

我们从这里开始:

enter image description here

...修改块以为LoginPage添加一个部分,结果是:

enter image description here

  • 继续编辑.vcxproj.filters文件

enter image description here

第1块:告诉Visual Studio在解决方案资源管理器中包含LoginPage.xaml(我认为!)

我们从这里开始:

enter image description here

...修改块以为LoginPage添加一个部分,结果是:

enter image description here

第2块:告诉Visual Studio在解决方案资源管理器中包含LoginPage.idl(我认为!)

我们从这里开始:

enter image description here

...修改块以为LoginPage添加一个部分,结果是:

enter image description here

第3块:告诉Visual Studio编译LoginPage.cpp作为该项目的一部分(我认为!)

我们从这里开始:

enter image description here

...修改块以为LoginPage添加一个部分,结果是:

enter image description here

  • 您已经完成了.vcxproj.vcxproj.filters文件的编辑。保存并关闭它们。
  • 其余的很简单。只需复制LoginPage文件,即可创建所有四个MainPage文件。

我们从项目中的以下文件开始:

enter image description here

...在复制了4个(突出显示的)MainPage文件并将其重命名为LoginPage之后,我们得到了以下文件:

enter image description here

  • 对于最后一步,您必须实际上在文本编辑器(不是Visual Studio)中打开四个新LoginPage文件 (不是Visual Studio)并进行搜索-并替换为文本MainPage,并替换为LoginPage

    在搜索中, DO 大写字母匹配,但 DO 不匹配'whole-word only'(即,某些数据类型具有{{1 }}作为名称的一部分,例如MainPage,并且还必须搜索并替换它们。)

    我不会粘贴实际源代码文件的屏幕截图。

  • 一旦在记下的四个文件中将所有出现的MainPageT替换为MainPage,请保存并关闭文件。

  • 您完成了!

在Visual Studio中打开解决方案,并注意其优点:

Solution Explorer现在显示我们的LoginPage文件以及正确嵌套的代码隐藏文件:

enter image description here

...并按F7键构建项目,构建成功:

enter image description here

...并且它也成功运行-与以前的操作相同。

这是因为,当然,您还没有使用LoginPage.xaml完成任何操作-它没有出现在用户界面中-但可以在代码中使用,而我让你从这里拿走!

我很感激Microsoft发布了出色的WinRT / C ++功能-至少可以说……令人沮丧……到目前为止,还没有办法添加新的据我所知,使用Visual Studio标准工具(例如LoginPage选项)将XAML Page应用于WinRT / C ++项目。更令人沮丧的是,也没有任何文档解释如何做(我可以找到)。

我当然希望我的问题和答案很快变得无关紧要,并且微软希望重新添加工具和文档。将新的XAML Add Item添加到Visual Studio中现有的WinRT / C ++项目中。

还是我弄错了?也许已经可以轻松地做到这一点,而我只是找不到它?

我希望这对某人有帮助,以防万一!