C# 如何动态创建DataTemplate并为其分配StackPanel?

C# 如何动态创建DataTemplate并为其分配StackPanel?,c#,windows-8,windows-runtime,C#,Windows 8,Windows Runtime,假设我想将以下内容作为数据模板: StackPanel stackPanel = new StackPanel(); Button button1 = new Button(); button1.Click += button1_Click; Button button2 = new Button(); button2.Click += button2_Click; stackPanel.Children.Add(button1); stackPanel.Children.Add(butto

假设我想将以下内容作为数据模板:

StackPanel stackPanel = new StackPanel();

Button button1 = new Button();
button1.Click += button1_Click;
Button button2 = new Button();
button2.Click += button2_Click;

stackPanel.Children.Add(button1);
stackPanel.Children.Add(button2);
如何将其转换为数据模板?我尝试创建DataTemplate类的实例,但我没有看到任何方法或属性允许我将上面的stackpanel设置为DataTemplate对象的内容

编辑: 我正试图在Windows应用商店应用程序中执行此操作。

创建一个新的StackPanel,将DataTemplate对象添加为它的子对象

StackPanel stackPanel = new StackPanel();
stackPanel.Children.Add(objDataTemplate);
虽然你不能这样做,但你是在寻找这个,还是我误解了你的问题

更新: 相反

希望这会有所帮助。

创建一个新的StackPanel,将DataTemplate对象添加为它的子对象

StackPanel stackPanel = new StackPanel();
stackPanel.Children.Add(objDataTemplate);
虽然你不能这样做,但你是在寻找这个,还是我误解了你的问题

更新: 相反

希望这会有所帮助。

展示了如何在代码隐藏中构建数据模板

//create the data template
DataTemplate objDataTemplate = new DataTemplate();
objDataTemplate.DataType = typeof(CreditCardPayment);

//set up the stack panel
FrameworkElementFactory spFactory = new FrameworkElementFactory(typeof(StackPanel));
spFactory.Name = "myFactory";
spFactory.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal); // Use Oritentation.Vertical if appropriate.

//Your code for creating the buttons goes here.

//set the visual tree of the data template
objDataTemplate.VisualTree = spFactory;
这应该可以做到。

展示了如何在代码隐藏中构建数据模板

//create the data template
DataTemplate objDataTemplate = new DataTemplate();
objDataTemplate.DataType = typeof(CreditCardPayment);

//set up the stack panel
FrameworkElementFactory spFactory = new FrameworkElementFactory(typeof(StackPanel));
spFactory.Name = "myFactory";
spFactory.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal); // Use Oritentation.Vertical if appropriate.

//Your code for creating the buttons goes here.

//set the visual tree of the data template
objDataTemplate.VisualTree = spFactory;

应该可以。

我想您可以尝试将StackPanel分配给DataTemplate对象的VisualTree属性,但这只是一个猜测。为什么不在XAML中构建模板呢?不幸的是,DataTemplate对象没有VisualTree属性。我不能在XAML中实现它,原因太复杂了,现在无法解释:/@tonyvitabile实际上,根据这个:,它做到了。它是从FrameworkTemplate继承的。是的,但我正在构建一个Windows应用商店应用程序。唯一可用的名为DataTemplate的类是:@tonyVitabile我想您可以尝试将StackPanel分配给DataTemplate对象的VisualTree属性,但这只是一个猜测。为什么不在XAML中构建模板呢?不幸的是,DataTemplate对象没有VisualTree属性。我不能在XAML中实现它,原因太复杂了,现在无法解释:/@tonyvitabile实际上,根据这个:,它做到了。它是从FrameworkTemplate继承的。是的,但我正在构建一个Windows应用商店应用程序。唯一可用的名为DataTemplate的类是:@TonyVitabileI正在尝试执行相反的操作,请将StackPanel分配给DataTemplate。如果您同时拥有StackPanel和DataTemplate,那么为什么要尝试执行相反的操作?不幸的是,Windows应用商店应用程序无权访问提到的FrameworkElementFactory和DataTemplate类:/@Debasis我正在尝试执行相反的操作,请将StackPanel分配给DataTemplate。如果您同时拥有StackPanel和DataTemplate,那么为什么要尝试执行相反的操作?很遗憾,Windows应用商店应用程序无权访问提及的FrameworkElementFactory和DataTemplate类:/@Debasis不幸的是,Windows应用商店应用程序无权访问提及的FrameworkElementFactory和DataTemplate类:/这是唯一可用的名为DataTemplate的类:抱歉,您的问题最初没有这样说。为什么不尝试在窗口的资源中使用XAML中的简单数据模板构建一个测试应用程序,然后获取对资源的引用并检查它?这将向您展示您必须构建的内容,然后您可以返回到要编写的代码中以生成类似的模板。谢谢大家!@TonyVitabileun幸运的是,Windows应用商店应用程序无权访问提到的FrameworkElementFactory和DataTemplate类:/这是唯一可用的名为DataTemplate的类:抱歉,您的问题最初没有这样说。为什么不尝试在窗口的资源中使用XAML中的简单数据模板构建一个测试应用程序,然后获取对资源的引用并检查它?这将向您展示您必须构建的内容,然后您可以返回到要编写的代码中以生成类似的模板。谢谢大家!@扁桃体胆汁