0

我正在尝试在 FlowDocumentReader 中保存和恢复文档的位置以创建书签功能。似乎没有任何可公开访问的搜索或搜索功能内置,让我有以下选择:

  1. 改用 FlowDocumentPageViewer,每次调整窗口大小时保存页面,并在重新加载应用程序后立即恢复。

  2. 循环遍历 FlowDocumentReader 的 Document 属性中的所有元素,查找第一个通过屏幕命中测试的元素,然后使用反射使用内部搜索功能在稍后将该文本重新显示在视图中。

  3. 序列化整个控件。

  4. 编写我自己的文档查看器控件。

第一很烦人,因为我不得不放弃 FlowDocumentReader 的两页和滚动查看选项。这也意味着在用户有机会调整窗口大小之前寻找保存的页面。这很脆弱,如果用户说在会话之间切换分辨率,它可能会中断。

2 号是一个花哨的 hack,它可能会起作用,但如果内部结构发生变化,它会很慢并且完全崩溃。

3 号看起来是我最好的选择,但它只能让我保存/恢复当前位置,不能设置任意书签。

第 4 号工作量太大。这些控件非常棒,我只需要这个功能......

还有其他方法可以解决这个问题吗?

4

1 回答 1

2

这似乎适用于页面视图,但不适用于滚动视图,这没关系。

reader是 type FlowDocumentReader,而 documentFlowDocument在其中。

设置书签:

var paginator = ((IDocumentPaginatorSource)document).DocumentPaginator as DynamicDocumentPaginator;
var position = paginator.GetPagePosition(paginator.GetPage(reader.PageNumber - 1)) as TextPointer;
bookmark = position.Paragraph;

恢复书签:

bookmark.BringIntoView();
于 2010-02-02T07:38:11.373 回答