尝试克隆用户控件时使用XamlWriter.Save()时的StackOverflowException

时间:2012-09-20 18:00:28

标签: c# wpf clone treeviewitem

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

这对我有用:

 System.Xaml.XamlServices.Save(obj);

来自System.Xaml.dll

它正确处理循环引用。