Как перейти к определенному номеру страницы в программе чтения потоковых документов через код в WPF? - PullRequest
1 голос
/ 26 октября 2009

В считывателе flowdocument есть свойство pagenumber. Но это свойство доступно только для чтения. Есть ли способ перейти к определенному номеру страницы в считывателе flowdocument. Пожалуйста, помогите.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 23 ноября 2012

Если вы отслеживаете блоки в FlowDocument, содержащемся в FlowDocumentReader, чем вы можете просто использовать:

// Getting a block by index
YourReader.Document.Blocks.ElementAt(index).BringIntoView();

// Showing Last Block
YourReader.Document.Blocks.LastBlock.BringIntoView();

// Showing the last Inline
(YourReader.Document.Blocks.LastBlock as Paragraph).Inlines.LastInline.BringIntoView();

Это работает только на странице Режимы просмотра FlowDocumentReader.

Если вы хотите сделать это в режиме прокрутки, вы должны спуститься вниз по визуальному дереву и найти ScrollViewer, что-то вроде этого:

        public static ScrollViewer FindScroll(Visual visual)
        {
            if (visual is ScrollViewer)
                return visual as ScrollViewer;

            ScrollViewer searchChiled = null;
            DependencyObject chiled;

            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(visual); i++)
            {
                chiled = VisualTreeHelper.GetChild(visual, i);
                if (chiled is Visual)
                    searchChiled = FindScroll(chiled as Visual);
                if (searchChiled != null)
                    return searchChiled;
            }

            return null;
        }

ScrollViewer scroller = FindScroll(YourReader as Visual);
if (scroller != null) 
   (scroller as ScrollViewer).ScrollToBottom();
1 голос
/ 26 октября 2009

Если вы хотите ограничить своих пользователей постраничным отображением, используйте вместо этого FlowDocumentPageViewer: у него есть метод GoToPage ().По некоторым причинам GoToPage (), кажется, не предлагается в FlowDocumentReader;Я предполагаю, что это потому, что FlowDocumentReader не всегда находится в режиме, когда подкачка имеет смысл (пользователь может выбрать представление с непрерывной прокруткой), и предоставляет свой собственный интерфейс для этого, когда он имеет смысл.

Вы можетепопробуйте отправить ему команду NavigationCommands.GoToPage, но это задокументировано только как работа с FlowDocumentPageViewer и DocumentViewer;Я не проверял это на FlowDocumentReader.

...