上海百维科技,上海网站建设 上海软件开发公司热线电话:021-57700304  
  首 页 产品与服务 软件定制 成功案例 思源优势 技术学院 关于我们 联系我们
 
 
思源软件学院 >>> 根目录>>.NET技术>>WPF >>>WPF:应用DocumentPaginator手动将FlowDocument分页
穷神猛追“勤勉”,片刻不舍。“勤勉”稍一懈怠,穷神就高奏凯歌。北条团水人物指的就是具有毅力的人、勤奋的人、入迷的人和忘我的人。——木村久一(上海网站建设)

WPF:应用DocumentPaginator手动将FlowDocument分页


Admin
2012年1月27日

示例法度可以按照用户定义的大小,将一个文本文件分页显示。

 

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

 

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];

 

            //获取页面

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; forint i = 0; i < elements.Length; i++

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var grid = new Grid();

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; grid.Width = width;

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; grid.Height = height;

&#160;

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var visual = paginator.GetPage(i).Visual;

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var visualBrush = new VisualBrush(visual);

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; grid.Background = visualBrush;

&#160;

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; elements[i] = grid;

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }

&#160;

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return elements;

&#160;&#160;&#160;&#160;&#160;&#160;&#160; }

&#160;

&#160;

&#160;

源代码下载
下载地址
重视:此为微软SkyDrive存档,请用浏览器直接下载,用某些下载对象可能无法下载
源代码景象:Visual Studio 2010

&#160;

&#160;

&#160;

:D

作者:Mgen


出处:www.cnblogs.com/mgen


本文版权归作者和博客园共有,迎接转载,但未经作者赞成必须保存此段声明,且在文章页面明显地位给出原文连接,不然保存究查法令义务的权力。


 


 

上海软件开发公司业务部:黄浦区重庆北路211号602室 | 上海软件开发公司技术部:松江区天云路259号| 上海软件开发公司综合部:松江区南期昌路346弄50号401室
上海软件开发 Copyright © 2005-2010 All Rights Reserved 电话:021-57616508  传真:57661889
沪ICP备05011021号