加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 00:25:54 所属栏目:百科 来源:网络整理
导读:我试图找到一种方法将一个画布的所有子项复制到另一个画布.类型无关紧要,因为它有不同类型的孩子. private void add_template_Click(object sender,RoutedEventArgs e) { root.Children.Clear(); foreach(var c in Template_canvas1.Children) { root.Childr
我试图找到一种方法将一个画布的所有子项复制到另一个画布.类型无关紧要,因为它有不同类型的孩子.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读