我有一个带框架的WPF窗口。我有一些代码使用printdialog和printvisual打印出框架的内容。但这只会打印屏幕上显示的内容,即使框架滚动且其他部分可用。
有没有办法添加分页并确保我的框架的整个内容都会打印出来。
或者是否有其他方式来获取我的帧内容并打印它?即不使用printvisual?
答案 0 :(得分:14)
是。我做到了这一点。这不是很困难。
将您的框架包裹在ScrollViewer中,该ScrollViewer通常禁用水平和垂直滚动
准备好打印时,启用垂直滚动。这将导致Frame被告知它具有无限的垂直空间,因此它将呈现所有内容。然后调用UpdateLayout()以获取要更新的布局。
实现IDocumentPaginator为每个页面返回相同的Frame,但每次调整剪辑和RenderTransform以显示实际Frame的不同部分。
使用自定义IDocumentPaginator打印
以上描述假定您要将框架的宽度固定到页面宽度并垂直分页。这适用于网页,但不适用于电子表格。对于类似电子表格的内容,您可以将ScrollViewer设置为允许在两个方向上滚动,从而为每个帧提供无限空间。在这种情况下,IDocumentPaginator是相同的,除了RenderTransforms和裁剪选择水平和垂直迭代。
这种技术实际上适用于任何WPF内容,而不仅仅是框架。