我想将一个元素从一个网格移动到另一个网格,并且有一个问题是以编程方式将模板分配给新实例。此外,我的尝试细节。
为此,我从模板中创建了一个类的实例及其可视外观。
在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;没有被分配给它。
答案 0 :(得分:2)
在这种情况下的问题似乎是你想要结合两件事:
new_instance
)您已经知道如何创建班级实例以及如何将其添加到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;
,并会使用您的自定义控件模板。