如何从 UIElement 中删除父元素? WPF

How to remove a parent from UIElement? WPF

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

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

然后我有另一个 window 带有构造函数和网格(网格名称是“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 parent 属性.

克隆“brd1”

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

您应该将元素克隆到一个新实例中。一种方法是 use XamlWriter class:

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 属性创建元素的新实例并以通常的方式设置其所有属性来克隆元素。