我如何将一个 FlowDocument 的内容复制到另一个 FlowDocument 下面是我尝试过的
foreach (var blk in fd1.Blocks)
{
fd2.Blocks.Add(blk);
}
fd1 是 FlowDocument1,fd2 是 FlowDocument2。
但我收到以下错误。
收藏已修改;枚举操作可能无法执行。
谢谢
阿尔文德
我如何将一个 FlowDocument 的内容复制到另一个 FlowDocument 下面是我尝试过的
foreach (var blk in fd1.Blocks)
{
fd2.Blocks.Add(blk);
}
fd1 是 FlowDocument1,fd2 是 FlowDocument2。
但我收到以下错误。
收藏已修改;枚举操作可能无法执行。
谢谢
阿尔文德
因为每个 Block 都由 FlowDocument “拥有”,所以不能只是将其添加到另一个 Block。您必须对其进行序列化,然后对其进行反序列化,这会破坏与原始 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
只是为了添加答案,如果你想移动而不是复制:
您不能只将元素添加到目标文档中,因为它们将同时出现在两个文档中 - 因此您需要先从源文档中删除它们。
using System.Linq;
...
var blockList = source.Blocks.ToList();
foreach (var block in blockList)
{
source.Blocks.Remove(block);
dest.Blocks.Add(block);
}
(实现说明:我们首先将要处理的块的引用放入单独的列表中,以避免source.Blocks
在枚举列表时更改列表foreach
)