Закладка WPF FlowDocumentReader - PullRequest
       30

Закладка WPF FlowDocumentReader

0 голосов
/ 02 февраля 2010

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

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

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

  3. Сериализация всего элемента управления.

  4. Создать собственный элемент управления для просмотра документов.

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

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

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

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

Есть ли другой способ сделать это?

1 Ответ

2 голосов
/ 02 февраля 2010

Похоже, это хорошо работает для просмотра страниц, но не для просмотра с прокруткой, что нормально.

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();
...