如何从 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
属性创建元素的新实例并以通常的方式设置其所有属性来克隆元素。
我有一些带边框的网格(网格名称是“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 属性.
您不能在两个地方重复使用相同的 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
属性创建元素的新实例并以通常的方式设置其所有属性来克隆元素。