1

我正在使用下面的方法来尝试克隆 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;
 }
4

2 回答 2

2

检查这个 TreeView 中是否有一些循环。例如:某些树视图节点(或其子节点的子节点)有一个指向父节点的子节点。StackOverflowException 通常用于内存不足的递归。

于 2012-09-20T20:31:58.277 回答
2

这对我有用:

 System.Xaml.XamlServices.Save(obj);

从 System.Xaml.dll

它正确处理循环引用。

于 2015-03-27T16:30:09.750 回答