2010-09-16 80 views
3

我有一个ScrollViewer和非常“长”的内容。 我写了一个继承自DocumentPaginator的类,但我不明白如何为此Visual的每个部分创建一个“框架”?我的意思是,我如何“看”下一页的控制? 我想这一点,但没有成功:如何在WPF中打印视觉与分页?

public override DocumentPage GetPage(int pageNumber) 
    { 
     double left = pageNumber * pageSize.Width; 
     Point pt = new Point(left, 0); 

     visual.RenderTransform = Transform.Identity; 
     visual.RenderTransform = new TranslateTransform(-left, 0); 

     visual.Measure(pageSize); 
     visual.Arrange(new Rect(visual.DesiredSize)); 

     DocumentPage page = new DocumentPage(visual); 
     return page; 
    } 

有了这个代码,我得到的第一页,因为它应该是,第二页是酷似首先,和所有其余的页面是空白。

回答

1

DocumentPaginator非常棘手。以下是帮我正确估计页大小,并确保没有空白页来几个步骤:

覆盖这两个属性IsPageCountValidPageCount为:

public override bool IsPageCountValid 
    { 
     get { return true; } 
    } 

public override int PageCount 
{ 
    get 
    { 
     if (pageCount == 0) 
     { 
      this.ComputePageCount(); 
     } 
     return pageCount; 
    } 
} 

使用一个私人函数ComputePageCount来做你的页面大小计算(把你的页面分成确切的页面数量a根据指定的单个pageSize)。

的关键,所有的页面次数运算能力在这里设置

IsPageCountValid =真

那么这将始终确保分页程序使用您的重写的方法来计算页数。

可以通过设置DocumentPaginator.PageSize属性来指定单个页面大小。

考虑到每页中的所有页眉/页脚。大多数空白/少页面是错误PageCount计算的结果。