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

时间:2014-07-08 14:26:16

标签: c# windows-8 windows-runtime

假设我想将以下内容作为DataTemplate:

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?我尝试创建一个DataTemplate类的实例,但我没有看到任何方法或属性可以让我将上面的stackpanel设置为DataTemplate对象的内容。

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

2 个答案:

答案 0 :(得分:3)

The accepted answer to this question显示了如何在后面的代码中构建DataTemplate

//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;

应该这样做。

答案 1 :(得分:0)

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

StackPanel stackPanel = new StackPanel();
stackPanel.Children.Add(objDataTemplate);

你在寻找这个(虽然你不能这样做),或者我误解了你的问题?

  

更新:   对于相反的

DataTemplate objDataTemplate = new DataTemplate(typeof(StackPanel));
        FrameworkElementFactory stPanelElement = new FrameworkElementFactory(typeof(StackPanel));
        objDataTemplate.VisualTree = stPanelElement;

希望这会有所帮助。