0

我有一个 C++/winrt 项目,其中包含用 C++ 代码创建的复杂动态 xaml 接口。现在我正在迁移到最新的 VS 15.9.0 Preview 3,它具有 C++/Winrt 平台支持,并且还允许在这样的项目中使用 xaml 设计器。但我不想使用设计器并在工具/选项/Xaml 中将其关闭。结果是我的任何编程 xaml 元素都没有出现。该项目似乎希望我在 xaml 代码页中输入这些元素,而不是使用 C++,例如 Grid()、StackPanel()、view.RowDefinitions.Append()、view.SetRow() 等。 GeneratedFiles 文件夹现在是充满了以前项目中不存在但无法删除的项目。是否仍然可以将 C++ 接口用于 xaml,如果可以,必须做什么才能启用它?谢谢。

4

2 回答 2

0

Ryan 是正确的:C++/winrt 确实支持 xaml 的编程创建,而且效果很好。在 MS 的几个 c++/winrt 人员的帮助下,我想我也知道为什么我的代码没有做任何事情。在我的应用程序的前一个版本中,我将 MainPage 声明为 C++ 类,而不是结构,并通过获取当前窗口并设置 currentWindow.Content(theGrid) 为 xaml 分配了起始 Grid。但是在新模板应用程序中 MainPage 是一个结构,这可能很重要,并且虽然以这种方式设置 window.Content 不再有效,但这样做:this->Content(theGrid)。抛开一些与 BlankApp 中的声明无关的问题,我认为这就是答案。如果您如上所述设置初始内容,则程序化 xaml 将起作用。

于 2018-10-18T04:40:27.963 回答
-1

不幸的是,这不是使用此 UI 系统的预期方式。基于 XAML 的 UI 系统是 WPF 的后代,它依赖于模型-视图-视图模型 (MVVM) 模式。

该模式打算使用三种类型的类来构成您的应用程序: 视图,主要用 XAML 编写,只处理显示给定的数据;ViewModels,它是提供视图数据和模型命令的包装器和翻译器;最后是模型,它是您的后端业务逻辑类。

您不信任设计者的本能是合理的 - 它会生成混乱且单一的 XAML 代码。但这是预览 XAML 代码外观的绝佳方式。

回到您的具体情况,库的 API 中存在真正的问题,这些问题将成为在 C++ 中以编程方式定义 UI 的严重障碍。相反,您将希望使用 XAML 来声明 UI。添加和删​​除网格列定义不是很好的支持,但使用StackPanels 和DockPanels 是执行此操作的正常方法。

如果您有更具体的问题,请随时在此处打开一个新问题,但请记住,除了下搜索。

如果您有更多相当广泛的问题,并且对于此处的主站点来说可能过于广泛,请随时加入WPF 频道的聊天,但请记住,我们大多数人都没有专门的 WinRT 经验。

于 2018-10-16T21:44:37.110 回答