如何在Visual Studio 2017中以编程方式添加xaml元素?



我有一个C++/winrt项目,该项目具有用C++代码创建的复杂动态xaml接口。现在我正在转向最新的VS 15.9.0预览版3,它具有对C++/Winrt的平台支持,并且还允许在此类项目中使用xaml设计器。但我不想使用设计器,并在工具/选项/Xaml 中将其关闭。结果是我的编程 xaml 元素都不显示。该项目似乎希望我在 xaml 代码页中输入这些元素,而不是使用 C++,例如 Grid((、StackPanel((、view。RowDefinitions.Append((, view.SetRow(( 等"生成的文件"文件夹现在充满了上一个项目中不存在但无法删除的项。是否仍然可以将 C++ 接口用于 xaml,如果是,必须执行哪些操作才能启用它?谢谢。

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

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

此模式旨在使用三种类型的类来组成应用程序:视图,主要用 XAML 编写,仅处理显示给定的数据;ViewModels,它是为视图提供数据并给出模型命令的包装器和转换器;最后是模型,这是您的后端业务逻辑类。

你不信任设计器的直觉是合理的 - 它会生成混乱且不合时宜的 XAML 代码。但它是预览 XAML 代码外观的绝佳方法。

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

如果您有更具体的问题,请随时在此处提出一个新问题,但请记住,除了 xaml、c++-winrt 和 winrt 之外,您可能还想先在标记 mvvm 和 wpf 下进行搜索。

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

最新更新