我正在尝试在FlowDocumentReader中保存和恢复文档的位置以创建书签功能。似乎没有任何可公开访问的搜索或搜索功能,让我有以下选项:
请改用FlowDocumentPageViewer, 每次窗口保存页面 调整大小并尽快恢复它 当应用程序重新加载。
循环遍历所有元素 文件属性 FlowDocumentReader,寻找 第一个通过屏幕上的 点击测试,然后使用反射 使用内部搜索功能 将该文本带回到视图中 以后的时间。
序列化整个控件。
编写我自己的文档查看器控件。
没有。 1很烦人,因为我必须放弃FlowDocumentReader的两页和滚动查看选项。它还意味着在用户有机会调整窗口大小之前搜索已保存的页面。这很脆弱,如果用户说在会话之间切换分辨率,可能会破坏。
没有。 2是一个可能会起作用的花哨黑客,但如果内部变化,则会很慢并完全破坏。
没有。 3看起来是我最好的选择,但它只能让我保存/恢复当前位置,而不是设置任意书签。
没有。 4是太多的工作。这些控件完全太棒了,我只需要这个功能......
还有其他方法可以解决这个问题吗?
答案 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();