Как удалить родителя из 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 и установите все его свойства обычным образом.