WPF의 코드를 통해 FlowDocument Reader에서 특정 페이지 번호를 얻는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1623133

문제

FlowDocument Reader에는 PagEnumber 속성이 있지만 해당 속성은 준비되어 있습니다. FlowDocument Reader에서 특정 페이지 번호를 얻는 방법이 있습니까?

감사.

도움이 되었습니까?

해결책

사용자를 PAGED 디스플레이로 제한하려는 경우 FlowDocumentPageViewer를 대신 사용하십시오. gotOpage () 메소드가 있습니다. 어떤 이유로 gotopage ()가 FlowDocumentReader에서 제공되지 않는 것 같습니다. FlowDocumentReader가 항상 페이징이 의미있는 모드에 있지는 않기 때문에 (사용자는 연속 스크롤보기를 선택할 수 있음) 의미가있을 때 자체 UI를 제공하기 때문입니다.

NavigationCommands.gotoPage 명령을 보낼 수 있지만 FlowDocumentPageViewer 및 DocumentViewer에서만 작업하는 것으로만 문서화됩니다. FlowDocumentReader에서 테스트하지 않았습니다.

다른 팁

FlowDocumentReader에 포함 된 FlowDocument의 블록을 추적하면 간단히 사용할 수있는 것보다 다음과 같습니다.

// 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의 페이지보기 모드에서

스크롤 모드에서 그렇게하고 싶다면 시각적 트리를 내려 가서 다음과 같이 스크롤 뷰어를 검색해야합니다.

        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();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top