WPF - 打印视觉效果时的分页

标签 wpf printing frames

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

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

或者是否有另一种方法来获取我的框架内容并打印它?即不使用printvisual?

最佳答案

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

  • 将您的 Frame 包裹在 ScrollViewer 中,该 ScrollViewer 通常禁用其水平和垂直滚动
  • 当您准备好打印时,启用垂直滚动。这将导致 Frame 被告知它具有无限的垂直空间,因此它将渲染所有内容。然后调用 UpdateLayout() 以获取要更新的布局。
  • 实现 IDocumentPaginator 为每个页面返回相同的 Frame,但每次调整剪辑和 RenderTransform 以显示实际 Frame 的不同部分。
  • 使用您的自定义 IDocumentPaginator 打印

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

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

    另请参阅
    Paginated Printing of WPF Visuals

    关于WPF - 打印视觉效果时的分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2211302/

    相关文章:

    c# - 基本 WPF 应用程序需要 10 秒才能打开 (.NET 4.5)

    c++ - C# 与非托管 C++ 互操作性的续篇

    javascript - window.print() CSS 未在打印预览中加载

    c++ - C/C++ 中的 (nil) 指针

    jquery - 元素相对于浏览器的 X 和 Y 位置(注 : Frames are involved)

    c# - 双向绑定(bind)到 WPF 中多个列表框上的 ListBox SelectedItem

    wpf - 使用 TPL 时避免窗口 (WPF) 卡住

    python-3.x - Python打印具有给定位数的 float

    jquery - 现代框架的替代品?

    html - 在 HTML5 中不推荐使用框架,但不推荐使用 iFrame