Как удалить родителя из UIElement? WPF

У меня есть сетка с рамкой (имя сетки "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» ?
Короче говоря, мне нужно клонировать «brd1» с нулевым родительским свойством.

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 properties и установите все его свойства обычным образом.

Другие вопросы по тегам