【问题标题】:Bookmarking WPF's FlowDocumentReader为 WPF 的 FlowDocumentReader 添加书签
【发布时间】:2010-02-02 15:38:11
【问题描述】:

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

  1. 改用 FlowDocumentPageViewer, 每次窗口保存页面 已调整大小并尽快恢复 随着应用重新加载。

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

  3. 序列化整个控件。

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

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

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

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

没有。 4 工作量太大了。这些控件非常很棒,我只需要这个功能...

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

【问题讨论】:

  • 当然是 3 因为它不可序列化...

标签: wpf flowdocument flowdocumentreader


【解决方案1】:

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

readerFlowDocumentReader 类型,文档是其中的FlowDocument

设置书签:

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

恢复书签:

bookmark.BringIntoView();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    相关资源
    最近更新 更多