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

时间:2015-04-30 18:57:25

标签: c# wpf xaml

我想将一个元素从一个网格移动到另一个网格,并且有一个问题是以编程方式将模板分配给新实例。此外,我的尝试细节。

为此,我从模板中创建了一个类的实例及其可视外观。

在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>

现在,我拖动元素,事件&#34; _event&#34;火灾。如果我通过这个推送一个标准元素(例如Rectangle),我会在drag-n-drop事件链的末尾执行以下操作:

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

模板&#34; templateX&#34;没有被分配给它。

1 个答案:

答案 0 :(得分:2)

在这种情况下的问题似乎是你想要结合两件事:

  • 您的自定义类的实例(new_instance
  • 可用作XAML资源的控件模板

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

如何从XAML资源中检索控制模板(或者就此而言,任何其他对象)已经在其他SO问题中讨论过,例如:

这导致:

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

现在,关键是你想要将控件模板本身添加到Children列表中。控件模板只是一组说明,如何为控件创建UI树,并在适当的时候将其属性绑定到控件的属性。

相反,您希望配置new_instance以使用从资源中检索的控件模板。您可以通过将控件模板分配到new_instance的{​​{3}}来执行此操作:

new_instance.Template = template;

new_instance添加到Children后,系统会显示该PROCEDURE "DOUGLAS"."tmp.douglas.yahoo::testando" ( ) LANGUAGE SQLSCRIPT SQL SECURITY INVOKER DEFAULT SCHEMA DOUGLAS AS BEGIN /***************************** procedure logic *****************************/ declare R varchar(50); declare cursor users FOR select * from USERS WHERE CREATE_TIME between ADD_SECONDS (CURRENT_TIMESTAMP , -7200 ) and CURRENT_TIMESTAMP; FOR R AS users DO CALL _SYS_REPO.GRANT_ACTIVATED_ROLE('dux.health.model.roles::finalUser',R.USER_NAME); END FOR; END; ,并会使用您的自定义控件模板。