gpt4 book ai didi

c# 将 Canvas 的所有子项复制到另一个 Canvas

转载 作者:行者123 更新时间:2023-11-30 13:19:03 26 4
gpt4 key购买 nike

我正在尝试找到一种方法将一个 Canvas 的所有子项复制到另一个 Canvas 。类型无关紧要,因为它有不同类型的 child 。

 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 复制到根 Canvas 。有什么建议吗?

最佳答案

问题是,UIElement 一次只能属于一个父元素。为了将您的项目添加到 root Canvas 中,您需要先将它们从 Template_canvas1 Canvas 中移除。

请看下面的代码。我创建了一个要复制的 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 中删除项目,您可以创建 UIElement 的深拷贝。另请参阅以下内容,其中我没有从 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 的所有子项复制到另一个 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32646694/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com