8

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

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

还是有其他方法可以获取我的框架内容并打印它?即不使用printvisual?

4

1 回答 1

14

是的。我已经做到了。这不是很困难。

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

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

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

  4. 使用您的自定义 IDocumentPaginator 打印

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

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

另请参见
WPF 视觉对象的分页打印

于 2010-02-11T05:58:09.583 回答