1

流文档阅读器中有一个 pagenumber 属性。但该属性是只读的。有没有办法在流文档阅读器中转到特定的页码。请帮忙。

谢谢。

4

2 回答 2

2

如果您跟踪 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 的页面 ViewingModes。

如果您想在滚动模式下这样做,您必须沿着可视化树向下搜索 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();
于 2012-11-23T10:41:17.130 回答
1

如果您愿意将用户限制为分页显示,请改用 FlowDocumentPageViewer:它有一个 GoToPage() 方法。由于某种原因,FlowDocumentReader 似乎没有提供 GoToPage();我猜这是因为 FlowDocumentReader 并不总是处于分页有意义的模式(用户可以选择连续滚动视图),并且在有意义时为此提供自己的 UI。

您可以尝试向其发送 NavigationCommands.GoToPage 命令,但这仅记录为在 FlowDocumentPageViewer 和 DocumentViewer 上工作;我还没有在 FlowDocumentReader 上测试过它。

于 2009-10-26T05:09:34.713 回答