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 に答える