2010-02-02 3 views
0

Я пытаюсь сохранить и восстановить положение документа в FlowDocumentReader для создания закладки. Там не кажется, любой искание или функция поиска сборки в том, что является доступным для общественности, оставив меня со следующими параметрами:Закладка WPF FlowDocumentReader

  1. Использование FlowDocumentPageViewer вместо сохранения страницы каждый раз, когда окно изменяет размер и восстановление это как только , так как приложение перезагружается.

  2. Перебор всех элементов в свойстве Документального FlowDocumentReader, глядя на первый, который проходит в хит тест на экране, а затем с помощью отражения для использовать внутренние функции поиска, чтобы довести этот текст вернуться в поле зрения на позже.

  3. Сериализовать весь контроль.

  4. Написать свое собственное средство просмотра документов.

No. 1 раздражает, потому что я должен был бы неустойки две страницы и прокрутки просмотра вариантов FlowDocumentReader. Это также означает поиск сохраненной страницы, прежде чем пользователь сможет изменить размер окна. Это хрупко и, вероятно, сломается, если пользователь скажет, переключилось разрешение между сеансами.

№ 2 - это яркий хак, который, вероятно, будет работать, но должен быть медленным и полностью разрушаться, если внутренности когда-либо меняются.

№ 3 выглядит как моя лучшая ставка, но только позволяет мне сохранять/восстанавливать текущую позицию, а не устанавливать произвольные закладки.

№ 4 - это слишком много работы. Эти элементы управления полностью фантастические, Мне просто нужна эта функция ...

Есть ли еще какой-нибудь способ?

+0

Конечно 3 это, потому что это не сериализации ... –

ответ

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(); 
Смежные вопросы