我使用下面的方法尝试克隆TreeViewItem,但是一旦它到达XamlWriter.Save()
它就会给我一个StackOverflowException。
触发此操作的代码是:
var b = Clone<TreeViewItem>(ViewTree.ItemContainerGenerator.ContainerFromIndex(0) as TreeViewItem);
ViewTree是我的TreeView的名称。
public static T Clone<T>(T from) {
string objStr = System.Windows.Markup.XamlWriter.Save(from);
System.IO.StringReader stringReader = new System.IO.StringReader(objStr);
System.Xml.XmlReader xmlReader = System.Xml.XmlReader.Create(stringReader);
object clone = System.Windows.Markup.XamlReader.Load(xmlReader);
return (T)clone;
}
答案 0 :(得分:2)
检查此TreeView是否有一些循环。例如:某些树视图节点(或其子节点)具有指向父节点的子节点。 StackOverflowException通常用于递归内存。
答案 1 :(得分:2)
这对我有用:
System.Xaml.XamlServices.Save(obj);
来自System.Xaml.dll
它正确处理循环引用。