我正在尝试找到一种方法将一个画布的所有子画面复制到另一个画布。类型并不重要,因为它有不同类型的孩子。
private void add_template_Click(object sender, RoutedEventArgs e)
{
root.Children.Clear();
foreach(var c in Template_canvas1.Children)
{
root.Children.Add(c);
}
}
上面的代码给出了错误"无效的操作错误"。 我想将template_canvas1中的子项复制到root canvas。建议?
答案 0 :(得分:13)
问题是,UIElement
一次只能属于一个父母。要将商品添加到root
画布中,您需要先从Template_canvas1
画布中删除它们。
请参阅以下代码。我创建了一个要复制的UIElements
数组,然后将其从Template_canvas1
中移除,然后再添加到root
。
private void add_template_Click(object sender, RoutedEventArgs e)
{
var childrenList = Template_canvas1.Children.Cast<UIElement>().ToArray();
root.Children.Clear();
foreach (var c in childrenList)
{
Template_canvas1.Children.Remove(c);
root.Children.Add(c);
}
}
还有一个选项,如果您不想从Template_canvas1
中删除项目,则可以创建UIElements的深层副本。另请参阅以下内容,我不会从Template_canvas1
中删除项目:
private void add_template_Click(object sender, RoutedEventArgs e)
{
root.Children.Clear();
foreach (UIElement child in Template_canvas1.Children)
{
var xaml = System.Windows.Markup.XamlWriter.Save(child);
var deepCopy = System.Windows.Markup.XamlReader.Parse(xaml) as UIElement;
root.Children.Add(deepCopy);
}
}