我有一个C ++ / winrt项目,它具有用C ++代码创建的复杂而动态的xaml接口。现在,我要转到最新的VS 15.9.0 Preview 3,它具有对C ++ / Winrt的平台支持,并且还允许在这样的项目中使用xaml设计器。但是我不想使用设计器,而已在Tools / Options / Xaml中将其关闭。结果是我的程序化xaml元素都没有出现。该项目似乎希望我在xaml代码页中输入这些元素,而不是使用C ++,例如Grid(),StackPanel(),view.RowDefinitions.Append(),view.SetRow()等。GeneratedFiles文件夹现在充满了先前项目中不存在但无法删除的项目。仍然可以将C ++接口用于xaml,如果可以,必须怎么做才能启用它?谢谢。
答案 0 :(得分:0)
Ryan是正确的:C ++ / winrt确实支持以编程方式创建xaml,并且效果很好。在MS的几个c ++ / winrt专家的帮助下,我想我也知道为什么我的代码没有执行任何操作。在我的应用程序的旧版本中,我已将MainPage声明为C ++类,而不是结构,并通过获取当前Window并设置currentWindow.Content(theGrid)为xaml分配了起始Grid。但是在新的模板应用程序MainPage中是一个结构,这可能很重要,并且在设置window.Content不再起作用时,这样做:this-> Content(theGrid)。撇开BlankApp中有关声明的一些不相关的问题,我认为这就是答案。如果您如上所述设置初始内容,则程序化xaml可以工作。
答案 1 :(得分:-1)
不幸的是,这不是使用此UI系统的预期方式。基于XAML的UI系统是WPF的后代,后者依赖于Model-View-ViewModel(MVVM)模式。
此模式打算由三种类型的类来组成您的应用程序:视图主要由XAML编写,仅处理显示给定的数据; ViewModels,是包装器和翻译器,用于提供视图数据并提供模型命令;最后是模型,这是您的后端业务逻辑类。
您不信任设计器的本能是合理的-它会生成混乱且独特的XAML代码。但这是预览XAML代码外观的绝佳方法。
要回到您的特定情况,该库的API中存在一些实际问题,这些问题将成为在C ++中以编程方式定义UI的严重障碍。相反,您将要使用XAML声明UI。添加和删除网格列定义不是很受支持,但是使用StackPanel
和DockPanel
s是执行此操作的常规方法。
如果您有更具体的问题,请随时在此处打开一个新问题,但请记住,除了{{之外,您可能还想先在标签mvvm和wpf下进行搜索3}},xaml和c++-winrt。
如果您对这里的主要站点还有更多较宽泛的问题,请随意加入winrt,但请记住,我们大多数人都没有WinRT方面的经验。