WPF:使用DocumentPaginator手动将FlowDocument分页

示例程序可以根据用户定义的大小,将一个文本文件分页显示。

image

 

这要得益于FlowDocument中的分页器(DocumentPaginator)。WPF中的FlowDocument,FixedDocument和FixedDocumentSequence都有自己的分页器。他们都继承与IDocumentPaginatorSource接口,这个借口则返回一个分页器对象DocumentPaginator。

image

 

FixedDocument和FixedDocumentSequence使用分页器很好理解,因为他们本身就要按固定页面大小显示。而FlowDocument虽然是流动的,但是某些控件FlowDocumentReader或者FlowDocumentPageViewer可以将他们按页显示,此时则用到FlowDocument的分页器(DocumentPaginator)。那么既然WPF内部控件可以使用,我们也可以自己使用。

 

具体步骤如下:

  1. 通过PageWidth和PageHeight属性设置FlowDocument大小
  2. 通过IDocumentPaginatorSource获取DocumentPaginator
  3. 通过DocumentPaginator.ComputePageCount计算总页数
  4. 获取所有页面的DocumentPage对象
  5. 通过DocumentPage.Visual和VisualBrush将页面内容反映到界面上

 

当然,本例中,得先将TXT文本转换成FlowDocument(将Run加入Paragraph中,然后将Paragraph加入FlowDocument中的Blocks属性中)。

 

主要逻辑代码:

        UIElement[] PageFlowDoc(FlowDocument fdoc, double width, double height)

        {

            //设置FlowDocument大小

            fdoc.PageWidth = width;

            fdoc.PageHeight = height;

            //获取分页器

            var paginator = ((IDocumentPaginatorSource)fdoc).DocumentPaginator;

            //计算总页数

            paginator.ComputePageCount();

 

            var elements = new UIElement[paginator.PageCount];

 

            //获取页面

            for (int i = 0; i < elements.Length; i++)

            {

                var grid = new Grid();

                grid.Width = width;

                grid.Height = height;

 

                var visual = paginator.GetPage(i).Visual;

                var visualBrush = new VisualBrush(visual);

                grid.Background = visualBrush;

 

                elements[i] = grid;

            }

 

            return elements;

        }

 

 

 

源代码下载
下载地址
注意:此为微软SkyDrive存档,请用浏览器直接下载,用某些下载工具可能无法下载
源代码环境:Visual Studio 2010

 

 

 

:D

作者:Mgen

本文版权归作者所有,欢迎以网址(链接)的方式转载,不欢迎复制文章内容的方式转载,其一是为了在搜索引擎中去掉重复文章内容,其二复制后的文章往往没有提供本博客的页面格式和链接,造成文章可读性很差。望有素质人自觉遵守上述建议。

如果一定要以复制文章内容的方式转载,必须在文章开头标明作者信息和原文章链接地址。否则保留追究法律责任的权利。

 

posted @ 2012-01-27 14:21 _Mgen 阅读(108) 评论(0) 编辑 收藏
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 2330103 cfi9WuAV7lQ=




版权(C) Mgen(刘圆圆) 2012