在Silverlight中打印4

时间:2010-04-30 14:35:00

标签: silverlight silverlight-4.0

我们的应用程序结构大致如下:

<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来确保它们都适合一个页面吗?

感谢您的任何指示......

2 个答案:

答案 0 :(得分:2)

在阅读帖子时想到的第一个想法是将Blob对象分组的画布大小。所以找到了一些可能对你有帮助的有趣片段:

  

除了指定   UIElement,你可以获得物理   打印区域的大小   PrintPageEventArgs .. ::。PrintableArea   属性。如果UIElement超过   PrintableArea,内容将是   夹在了边界   PrintableArea。的尺寸   可打印区域以屏幕为基础   像素。

  

你使用   PrintPageEventArgs .. ::。HasMorePages的   用于打印文档的属性   多页。默认值为   PrintPageEventArgs .. ::。HasMorePages是   是的,所以不需要设置   一页文件。但是,如果   你可以打印多个页面   设置   PrintPageEventArgs .. ::。HasMorePages的   属性为true表示   还有其他要打印的页面。   你设定   PrintPageEventArgs .. ::。HasMorePages的   在PrintPage事件中返回false   处理程序,当最后一页出现时   打印。

Documentation article

答案 1 :(得分:0)

您可以在打印前对LayoutRoot应用缩放变换。

但我遇到了LayoutRoot打印后缩小/缩小的问题。 (问题here