为WPF的FlowDocumentReader添加书签

时间:2010-02-02 00:22:39

标签: wpf flowdocument flowdocumentreader

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

  1. 请改用FlowDocumentPageViewer, 每次窗口保存页面 调整大小并尽快恢复它 当应用程序重新加载。

  2. 循环遍历所有元素 文件属性 FlowDocumentReader,寻找 第一个通过屏幕上的 点击测试,然后使用反射 使用内部搜索功能 将该文本带回到视图中 以后的时间。

  3. 序列化整个控件。

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

  5. 没有。 1很烦人,因为我必须放弃FlowDocumentReader的两页和滚动查看选项。它还意味着在用户有机会调整窗口大小之前搜索已保存的页面。这很脆弱,如果用户说在会话之间切换分辨率,可能会破坏。

    没有。 2是一个可能会起作用的花哨黑客,但如果内部变化,则会很慢并完全破坏。

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

    没有。 4是太多的工作。这些控件完全太棒了,我只需要这个功能......

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

1 个答案:

答案 0 :(得分:2)

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

reader的类型为FlowDocumentReader,其中的文档为FlowDocument

设置书签:

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

恢复书签:

bookmark.BringIntoView();