7

以下のFlowDocumentのコンテンツを別のFlowDocumentにコピーするにはどうすればよいですか

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

fd1 は FlowDocument1 で、fd2 は FlowDocument2 です。

しかし、私は以下のエラーが発生します。

コレクションが変更されました。列挙操作が実行されない場合があります。

ありがとう

アービンド

4

2 に答える 2

7

各ブロックは FlowDocument によって「所有」されているため、別のブロックに追加することはできません。シリアル化してから逆シリアル化する必要があります。これにより、元の FlowDocument との結合が解除され、別の FlowDocument に追加できるようになります。

/// <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

于 2009-12-08T11:13:30.467 に答える