WPF - 打印视觉时的分页

时间:2010-02-05 23:53:03

标签: wpf printing frames

我有一个带框架的WPF窗口。我有一些代码使用printdialog和printvisual打印出框架的内容。但这只会打印屏幕上显示的内容,即使框架滚动且其他部分可用。

有没有办法添加分页并确保我的框架的整个内容都会打印出来。

或者是否有其他方式来获取我的帧内容并打印它?即不使用printvisual?

1 个答案:

答案 0 :(得分:14)

是。我做到了这一点。这不是很困难。

  1. 将您的框架包裹在ScrollViewer中,该ScrollViewer通常禁用水平和垂直滚动

  2. 准备好打印时,启用垂直滚动。这将导致Frame被告知它具有无限的垂直空间,因此它将呈现所有内容。然后调用UpdateLayout()以获取要更新的布局。

  3. 实现IDocumentPaginator为每个页面返回相同的Frame,但每次调整剪辑和RenderTransform以显示实际Frame的不同部分。

  4. 使用自定义IDocumentPaginator打印

  5. 以上描述假定您要将框架的宽度固定到页面宽度并垂直分页。这适用于网页,但不适用于电子表格。对于类似电子表格的内容,您可以将ScrollViewer设置为允许在两个方向上滚动,从而为每个帧提供无限空间。在这种情况下,IDocumentPaginator是相同的,除了RenderTransforms和裁剪选择水平和垂直迭代。

    这种技术实际上适用于任何WPF内容,而不仅仅是框架。

    另见
    Paginated Printing of WPF Visuals