1

我有一些带边框的网格(网格名称是“maingrid”)

Border brd1 = new Border();
this.maingrid.Children.Add(brd1);
SomeClass = new SomeClass(brd1);

然后我有另一个带有构造函数和网格的窗口(网格名称是“somegrid”)

public SomeClass(Border brd2)
{
InitializeComponent();

//i tried to do that: ((Grid)brd2.Parent).Children.Remove(brd2)
//but if i do that, border from "maingrid" removes too
this.somegrid.Children.Add(brd2);
}

如何从“brd2”中删除父母并使此边框成为“somegrid”的子元素,但我需要将“brd1”与“maingrid”一起保留
简而言之,我需要使用 null 父属性克隆“brd1”。

4

1 回答 1

1

您不能Border在两个地方重复使用相同的元素,因为一个元素只能在可视化树中出现一次。

您应该将该元素克隆到一个新实例中。一种方法是使用该类XamlWriter

private static T Clone<T>(T element)
{
    string xaml = XamlWriter.Save(element);
    using (StringReader stringReader = new StringReader(xaml))
    using (XmlReader xmlReader = XmlReader.Create(stringReader))
        return (T)XamlReader.Load(xmlReader);
}

用法:

Border brd2 = Clone(brd1);

当然,您也可以选择通过简单地使用属性创建一个新实例来克隆该元素,new并以通常的方式设置其所有属性。

于 2021-04-29T08:25:29.897 回答