Как объединить несколько FlowDocuments вместе в 1 FlowDocument - PullRequest
0 голосов
/ 01 марта 2012

У меня есть несколько 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);
   }
}

1 Ответ

3 голосов
/ 01 марта 2012

Поскольку 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)
...