[英]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 父属性克隆“brd1”。
您不能在两个地方重复使用相同的Border
元素,因为一个元素只能在可视化树中出现一次。
您应该将该元素克隆到一个新实例中。 一种方法是使用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
属性创建它的新实例并以通常的方式设置其所有属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.