0

FlowDocumentReader 内のドキュメントの位置を保存して復元し、ブックマーク機能を作成しようとしています。一般にアクセス可能なシークまたは検索機能が組み込まれていないように見えるため、次のオプションが残されています。

  1. 代わりに FlowDocumentPageViewer を使用して、ウィンドウのサイズが変更されるたびにページを保存し、アプリがリロードされるとすぐに復元します。

  2. FlowDocumentReader の Document プロパティ内のすべての要素をループして、画面上のヒット テストに合格した最初の要素を探し、リフレクションを使用して内部検索機能を使用し、後でそのテキストをビューに戻します。

  3. コントロール全体をシリアル化します。

  4. 独自のドキュメント ビューアー コントロールを記述します。

No. 1 は面倒です。FlowDocumentReader の 2 ページとスクロール表示オプションを放棄しなければならないからです。また、ユーザーがウィンドウのサイズを変更する前に、保存されたページをシークすることも意味します。これは壊れやすく、ユーザーがセッション間で解像度を切り替えたと言うと、おそらく壊れるでしょう。

No. 2 は派手なハックで、おそらく機能しますが、遅くなり、内部が変更されると完全に壊れてしまいます。

No. 3 は私の最善の策のように見えますが、現在の位置を保存/復元することしかできず、任意のブックマークを設定することはできません。

No. 4 はやりすぎです。これらのコントロールは非常に素晴らしいです。この 1 つの機能だけが必要です...

これについて他に方法はありますか?

4

1 に答える 1

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();
于 2010-02-02T07:38:11.373 に答える