如何将多个FlowDocument连接成一个FlowDocument

3

我有多个FlowDocuments,希望将它们连接在一起。 以下方法没有返回语句。 我想做的是将TextRange转回FlowDocument。

private FlowDocument Concatenate(FlowDocument source, FlowDocument target)
{   using(MemoryStream ms = new MemoryStream())
    {
      TextRange tr = new TextRange(source.ContentStart, source.ContentEnd);
      tr.Save(ms, DataFormats.XamlPackage);
      ms.Seek(0, SeekOrigin.Begin);
      tr = new TextRange(target.ContentEnd, target.ContentEnd);
      tr.Load(ms, DataFormats.XamlPackage);
   }
}

我认为问题在于你可能会有每个文件都有一个根节点或者没有根节点的情况。我建议尝试使用XML来读取每个文件的内容,然后再使用XML将这些内容写入到一个文件中。 - paparazzo
2个回答

5

由于FlowDocuments基本上只是块集合,因此可以将源文档中的集合作为块列表提取出来,然后将其插入目标文档。请确保使用ToList()提取块,否则您将会遇到“对象已属于另一个集合”的错误。

尝试使用以下代码(未经测试):

'targetDocument is flowdocument that will be aggregate of both
'insertDocument contains document content you want to insert into target
 Dim insertBlocks As List(Of Block) = insertDocument.Blocks.ToList()
 targetDocument.Blocks.AddRange(insertBlocks)

2

以下是已经测试过的@TheZenker答案的C#实现:

public static FlowDocument MergedFlowDoc(IEnumerable<FlowDocument> fDocs)
{
    var fDoc = new FlowDocument();
    foreach (var doc in fDocs)
    {
        fDoc.Blocks.AddRange(doc.Blocks.ToList());
    }
    return fDoc;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接