繁体   English   中英

以编程方式从模板创建元素

[英]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
  • 可用作XAML资源的控件模板

您已经知道如何创建类的实例以及如何将其添加到“ Children列表中。

其他SO问题中还讨论了如何从XAML资源中检索控制模板(或其他任何对象)的方法,例如:

这导致:

ControlTemplate template = (ControlTemplate)this.FindResource("templateX");

现在,关键的一点是,你不想控制模板本身添加到Children名单。 控件模板只是一组说明,说明如何为控件创建UI树并将控件的属性绑定到控件的属性(如果适用)。

而是要配置new_instance以使用从资源中检索到的控制模板。 您可以通过将控件模板分配给new_instanceTemplate属性 new_instance

new_instance.Template = template;

new_instance添加到Children ,它将显示出来,并将使用您的自定义控件模板。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM