[英]How do you create an element programmatically from a data template defined in XAML?
[英]Create an element from template programmatically
我想将一个元素从一个网格移动到另一个网格,并遇到了以编程方式将模板分配给新实例的问题。 此外,我尝试的细节。
为此,我从该模板创建类的实例及其外观。
在Window标记内,我声明了名称空间:
xlmns:my="clr-namespace:myNameSpace"
我在资源中有一个模板:
<ControlTemplate x:Key="templateX">
<StackPanel>
<Image Source="pic.png" Width="50" Height="50"/>
</StackPanel>
</ControlTemplate>
并将元素放入网格中。
<Grid Grid.Row="2">
<StackPanel>
<my:someClass Template="{StaticResource templateX}" MouseMove="_event">
</StackPanel>
</Grid>
现在,我拖动该元素,将触发事件“ _event”。 如果我通过它推动一个标准元素(例如Rectangle),则在事件拖放链的末尾执行以下操作:
Rectangle new_instance = new Rectangle();
// place for rectangle's form and color
NewPlace.Children.Add(new_instance);
// place for positioning the rectangle in NewPlace canvas
我该如何使用someClass的元素做最后一部分? 如果我做
someClass new_instance = new someClass();
NewPlace.Children.Add(new_instance);
模板“ templateX”未分配给它。
在这种情况下,问题似乎在于您想结合两件事:
new_instance
) 您已经知道如何创建类的实例以及如何将其添加到“ Children
列表中。
其他SO问题中还讨论了如何从XAML资源中检索控制模板(或其他任何对象)的方法,例如:
这导致:
ControlTemplate template = (ControlTemplate)this.FindResource("templateX");
现在,关键的一点是,你不想控制模板本身添加到Children
名单。 控件模板只是一组说明,说明如何为控件创建UI树并将控件的属性绑定到控件的属性(如果适用)。
而是要配置new_instance
以使用从资源中检索到的控制模板。 您可以通过将控件模板分配给new_instance
的Template
属性 new_instance
:
new_instance.Template = template;
将new_instance
添加到Children
,它将显示出来,并将使用您的自定义控件模板。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.