资源:
<Grid x:Key="mechineItem" >
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Path Style="{StaticResource Terminator}">
<s:DesignerItem.DragThumbTemplate>
<ControlTemplate>
<Path Style="{StaticResource Terminator_DragThumb}"/>
</ControlTemplate>
</s:DesignerItem.DragThumbTemplate>
</Path>
</Grid>
生成控件的代码
foreach (string name in Names)
{
if (name != "")
{
//生成item
Grid item = (Grid)this.Resources["mechineItem"];
item.Name = name;
TextBlock ts = new TextBlock();
ts.Text = name;
ts.TextAlignment = TextAlignment.Center;
Grid.SetRow(ts, 1);
item.Children.Add(ts);
//断开父链接
if (item.Parent != null) item.Parent.SetValue(ContentPresenter.ContentProperty, null);
//将item添加至控件
toolBox1.Items.Add(item);
Filelist.Add(name);
}
}
运行程序后出错,提示指定的元素已经是另一个元素的逻辑子元素,请先将其断开连接,错误出现在toolBox1.Items.Add(item);这句话,推断是不能添加相同控件
解决方法如下
方法1
<Grid x:Key="mechineItem">中添加语句 x:Shared="False":表示每次请求都创建一个新的实例。如果不添加这句话默认是True表示所有请求都是共享同一个实例。
x:Shared的具体用法参见:http://www.cnblogs.com/qc1984326/archive/2009/04/28/1445743.html
方法2
断开父节点
if (item.Parent != null) item.Parent.SetValue(ContentPresenter.ContentProperty, null);
改语句将生成的item的父逻辑属性设置为null