如何将一个FlowDocument的内容复制到下面的另一个FlowDocument是我所尝试的
foreach (var blk in fd1.Blocks)
{
fd2.Blocks.Add(blk);
}fd1是FlowDocument1,fd2是FlowDocument2。
但我得到了下面的错误。
集合已被修改;枚举操作可能不会执行。
谢谢
阿文德
发布于 2009-12-08 11:13:30
因为每个块都是由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
发布于 2019-11-21 22:10:24
如果您想要移动而不是复制,只需添加答案:
您不能仅仅将元素添加到目标文档中,因为它们将出现在两个文档中-因此您需要首先从源文档中删除它们。
using System.Linq;
...
var blockList = source.Blocks.ToList();
foreach (var block in blockList)
{
source.Blocks.Remove(block);
dest.Blocks.Add(block);
}(实现注意:我们将对块的引用放在一个单独的列表中,以避免在foreach__中枚举它时更改它)
https://stackoverflow.com/questions/1796821
复制相似问题