Закладка WPF FlowDocumentReader
Я пытаюсь сохранить и восстановить положение документа в FlowDocumentReader для создания функции закладки. Похоже, что ни одна из функций поиска или поиска не является общедоступной, оставляя мне следующие параметры:
Вместо этого используйте FlowDocumentPageViewer, сохраняя страницу при каждом изменении размера окна и восстанавливая ее, как только приложение перезагружается.
Переберите все элементы в свойстве Document объекта FlowDocumentReader, ищите первый, который проходит тест на попадание на экран, затем используйте отражение, чтобы использовать внутренние функции поиска, чтобы позже вернуть этот текст в представление.
Сериализация всего контроля.
Написать свой собственный элемент управления просмотра документов.
Номер 1 раздражает, потому что мне пришлось бы лишиться двухстраничных и прокручиваемых опций просмотра FlowDocumentReader. Это также означает поиск сохраненной страницы до того, как пользователь сможет изменить размер окна. Это хрупко и, вероятно, сломалось бы, если бы пользователь сказал, переключал разрешения между сессиями.
№ 2 - броский взлом, который, вероятно, сработает, но будет медленным и сломаться полностью, если внутренние органы когда-либо изменятся.
№ 3 выглядит как моя лучшая ставка, но позволяет только сохранять / восстанавливать текущую позицию, а не устанавливать произвольные закладки.
№ 4 просто слишком много работы. Эти элементы управления просто фантастические, мне просто нужна эта особенность...
Есть ли другой способ пойти по этому поводу?
1 ответ
Похоже, это хорошо работает для просмотра страниц, но не для просмотра с прокруткой, что нормально.
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();