如何通过WPF中的代码转到flowdocument阅读器中的特定页码?

如何通过WPF中的代码转到flowdocument阅读器中的特定页码?,wpf,flowdocument,flowdocumentreader,Wpf,Flowdocument,Flowdocumentreader,flowdocument reader中有一个pagenumber属性。但该属性是只读的。是否有办法转到flowdocument reader中的特定页码。请帮助 谢谢。如果您希望将用户限制为分页显示,请改用FlowDocumentPageViewer:这有一个GoToPage()方法。出于某种原因,FlowDocumentReader上似乎没有提供GoToPage();我猜这是因为FlowDocumentReader并不总是处于分页有意义的模式(用户可以选择一个连续滚动视图),并在有意义时为此

flowdocument reader中有一个pagenumber属性。但该属性是只读的。是否有办法转到flowdocument reader中的特定页码。请帮助


谢谢。

如果您希望将用户限制为分页显示,请改用FlowDocumentPageViewer:这有一个GoToPage()方法。出于某种原因,FlowDocumentReader上似乎没有提供GoToPage();我猜这是因为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的页面查看模式

如果你想在滚动模式下这样做,你必须沿着视觉树搜索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();
publicstaticscrollviewerfindscroll(可视)
{
if(可视为ScrollViewer)
以ScrollViewer的形式返回视觉;
ScrollViewer searchChiled=null;
依赖性对象;
for(int i=0;i