wpf - 如何在 WPF 中打印带有分页的视觉对象?

标签 wpf printing pagination

我有一个 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很棘手。以下是帮助我正确估计页面大小并确保没有空白页出现的几个步骤:

覆盖这两个属性 IsPageCountValidPageCount作为:

    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/

相关文章:

c# - 在 Linux 上编译 C# + WPF 以便在 Windows 上运行

c# - 将 UTC DateTime 转换为 Xaml 中的本地时区?

html - 溢出 CSS 树

algorithm - 布置图表以在纸上打印

c# - 在我需要基于 XAML 控件进行计算的情况下,使用 MVVM 与控件交互的正确设计是什么?

c# - 在运行时使用 Mahapps.Metro 添加自己的 'accents'

c# - .net 结束打印事件

php - Codeigniter 将页面相互链接

mysql - 分页sql查询语法

angular - 无法为我的 Angular 项目添加分页