我试图找到一种方法将一个画布的所有子项复制到另一个画布.类型无关紧要,因为它有不同类型的孩子.
private void add_template_Click(object sender, RoutedEventArgs e)
{
root.Children.Clear();
foreach(var c in Template_canvas1.Children)
{
root.Children.Add(c);
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码给出错误"无效的操作错误".我想将template_canvas1中的子项复制到root canvas.建议?
cae*_*say 14
问题是,a 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);
}
}
Run Code Online (Sandbox Code Playgroud)
还有一个选项,如果您不想删除项目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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3372 次 |
| 最近记录: |