2

連結したい複数の FlowDocuments があります。以下のメソッドには return ステートメントがありません。私がやりたいことは、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);
   }
}
4

2 に答える 2

4

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)
于 2012-03-01T13:57:13.650 に答える