我有一个 ScrollViewer 和非常“长”的内容。
我写了一个继承自 DocumentPaginator 的类,但我不明白如何为这个 Visual 的每个部分创建一个“框架”?我的意思是,我如何“查看”控件的下一页?
我试过这个,但没有成功:
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;
}
使用此代码,我得到了应有的第一页,第二页与第一页完全相同,其余所有页面均为空白。
最佳答案
DocumentPaginator
很棘手。以下是帮助我正确估计页面大小并确保没有空白页出现的几个步骤:
覆盖这两个属性 IsPageCountValid
和 PageCount
作为:
public override bool IsPageCountValid { get { return true; } }
和
public override int PageCount
{
get
{
if (pageCount == 0)
{
this.ComputePageCount();
}
return pageCount;
}
}
使用私有(private)函数 ComputePageCount 进行页面大小计算(根据指定的单个 pageSize 将页面分解为确切的页面数)。
所有页数计算能力的关键在这里设置
IsPageCountValid
= true
这将始终确保分页器使用您覆盖的方法来计算页数。
可以通过设置 DocumentPaginator.PageSize 属性来指定单个页面大小。
考虑每一页中的所有页眉/页脚。大多数空白/较少页面是错误的 PageCount 计算的结果。
关于wpf - 如何在 WPF 中打印带有分页的视觉对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3726995/