c#将canvas的所有子项复制到另一个画布

c#将canvas的所有子项复制到另一个画布,第1张

概述我试图找到一种方法将一个画布的所有子项复制到另一个画布.类型无关紧要,因为它有不同类型的孩子. private void add_template_Click(object sender, RoutedEventArgs e) { root.Children.Clear(); foreach(var c in Template_canvas1.Children) 我试图找到一种方法将一个画布的所有子项复制到另一个画布.类型无关紧要,因为它有不同类型的孩子.

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.建议?

解决方法 问题是,UIElement一次只能属于一个父母.要将项目添加到根画布,您需要先从Template_canvas1画布中删除它们.

请参阅以下代码.我创建了一个要复制的UIElements数组,然后在将它们添加到root之前将它们从Template_canvas1中删除.

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);    }}
总结

以上是内存溢出为你收集整理的c#将canvas的所有子项复制到另一个画布全部内容,希望文章能够帮你解决c#将canvas的所有子项复制到另一个画布所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1223978.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存