我们的应用程序结构大致如下:
<Grid x:Name="LayoutRoot">
<ScrollViewer>
<Canvas x:Name="canvas">
<StackPanel> < Button /><Slider /><Button /></StackPanel>
<custom:Blob />
<custom:Blob />
<custom:Blob />
</Canvas>
</ScrollViewer>
</Grid>
每个Blob由1个或多个矩形,线条和文本框组成;它们位于画布上的任何位置。
如果我使用LayoutRoot打印文档:
PrintDocument pd = new PrintDocument();
pd += (s, pe) => { pe.PageVisual = LayoutRoot; };
pd.Print("Blobs");
...它就像一个打印屏幕 - 滚动条,滑块,可见的斑点 - 都会被打印出来。
如果我设置PageVisual = canvas,则不会打印任何内容。
如何才能打印所有blob对象以及那些对象?我是否需要将它们复制到另一个容器中,并将该容器提供给PageVisual?我可以使用ViewBox来确保它们都适合一个页面吗?
感谢您的任何指示......
答案 0 :(得分:2)
在阅读帖子时想到的第一个想法是将Blob对象分组的画布大小。所以找到了一些可能对你有帮助的有趣片段:
除了指定 UIElement,你可以获得物理 打印区域的大小 PrintPageEventArgs .. ::。PrintableArea 属性。如果UIElement超过 PrintableArea,内容将是 夹在了边界 PrintableArea。的尺寸 可打印区域以屏幕为基础 像素。
和
你使用 PrintPageEventArgs .. ::。HasMorePages的 用于打印文档的属性 多页。默认值为 PrintPageEventArgs .. ::。HasMorePages是 是的,所以不需要设置 一页文件。但是,如果 你可以打印多个页面 设置 PrintPageEventArgs .. ::。HasMorePages的 属性为true表示 还有其他要打印的页面。 你设定 PrintPageEventArgs .. ::。HasMorePages的 在PrintPage事件中返回false 处理程序,当最后一页出现时 打印。
答案 1 :(得分:0)
您可以在打印前对LayoutRoot
应用缩放变换。
但我遇到了LayoutRoot
打印后缩小/缩小的问题。 (问题here)