首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一个FlowDocument复制到第二个FlowDocument

将一个FlowDocument复制到第二个FlowDocument
EN

Stack Overflow用户
提问于 2009-11-25 13:12:37
回答 2查看 6.9K关注 0票数 8

如何将一个FlowDocument的内容复制到下面的另一个FlowDocument是我所尝试的

代码语言:javascript
复制
foreach (var blk in fd1.Blocks)
{
   fd2.Blocks.Add(blk);
}

fd1是FlowDocument1,fd2是FlowDocument2。

但我得到了下面的错误。

集合已被修改;枚举操作可能不会执行。

谢谢

阿文德

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-08 11:13:30

因为每个块都是由FlowDocument‘拥有’的,所以不能仅仅将它添加到另一个块中。您必须序列化它,然后反序列化它,这将打破与原始FlowDocument的联系,从而允许您将它添加到另一个。

代码语言:javascript
复制
/// <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

票数 8
EN

Stack Overflow用户

发布于 2019-11-21 22:10:24

如果您想要移动而不是复制,只需添加答案:

您不能仅仅将元素添加到目标文档中,因为它们将出现在两个文档中-因此您需要首先从源文档中删除它们。

代码语言:javascript
复制
using System.Linq;
...

var blockList = source.Blocks.ToList();
foreach (var block in blockList)
{
    source.Blocks.Remove(block);
    dest.Blocks.Add(block);
}

(实现注意:我们将对块的引用放在一个单独的列表中,以避免在foreach__中枚举它时更改它)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1796821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档