代码之家  ›  专栏  ›  技术社区  ›  ARV

将一个流程文档复制到第二个流程文档

  •  7
  • ARV  · 技术社区  · 15 年前

    我尝试如何将一个流程文档的内容复制到下面的另一个流程文档

    foreach (var blk in fd1.Blocks)
    {
       fd2.Blocks.Add(blk);
    }
    

    FD1是流程文档1,FD2是流程文档2。

    但我得到了下面的错误。

    集合已修改;枚举操作可能无法执行。

    谢谢

    阿文德

    1 回复  |  直到 7 年前
        1
  •  4
  •   Ed Bayiates    7 年前

    因为每个块都由一个流程文档“拥有”,所以不能将其添加到另一个块中。您必须序列化它,然后反序列化它,这会破坏与原始流程文档的绑定,从而允许您将其添加到另一个流程文档中。

    /// <summary>
    /// Adds one flowdocument to another.
    /// </summary>
    /// <param name="from">From.</param>
    /// <param name="to">To.</param>
    public static void AddDocument(FlowDocument from, FlowDocument to)
    {
        TextRange range = new TextRange(from.ContentStart, from.ContentEnd);
        MemoryStream stream = new MemoryStream();
        System.Windows.Markup.XamlWriter.Save(range, stream);
        range.Save(stream, DataFormats.XamlPackage);
        TextRange range2 = new TextRange(to.ContentEnd, to.ContentEnd);
        range2.Load(stream, DataFormats.XamlPackage);
    }
    

    复制自:

    http://social.msdn.microsoft.com/Forums/en/wpf/thread/f4b26d9b-5b74-446b-85e7-e49e519380ad