Vb.net 将4个网格打印到4张纸上
使用Silverlight 5和VB.Net,我试图从LayoutRoot打印4个网格到4张单独的纸,如下所示,但我只打印最后一个网格。我明白为什么,但我应该怎么做?我将网格缩放到其原始大小的75%,因为这样可以使网格适合于面向肖像的纸张宽度 谢谢Vb.net 将4个网格打印到4张纸上,vb.net,silverlight,silverlight-5.0,vb.net-2010,Vb.net,Silverlight,Silverlight 5.0,Vb.net 2010,使用Silverlight 5和VB.Net,我试图从LayoutRoot打印4个网格到4张单独的纸,如下所示,但我只打印最后一个网格。我明白为什么,但我应该怎么做?我将网格缩放到其原始大小的75%,因为这样可以使网格适合于面向肖像的纸张宽度 谢谢 Imports System.Windows.Printing Partial Public Class MainPage Inherits UserControl Public WithEvents pd As New Print
Imports System.Windows.Printing
Partial Public Class MainPage
Inherits UserControl
Public WithEvents pd As New PrintDocument
Public Sub New()
InitializeComponent()
End Sub
Private Sub Button1_Click(sender As Object, ByVal e As RoutedEventArgs) Handles Button1.Click
pd.Print("My Test Print")
Call ScaleUp()
End Sub
Private Sub pd_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs) Handles pd.PrintPage
Dim ScaleDown As New ScaleTransform
ScaleDown.ScaleX = "0.75"
ScaleDown.ScaleY = "0.75"
CompChartGrid.RenderTransform = ScaleDown
AttChartGrid.RenderTransform = ScaleDown
CompDetGrid.RenderTransform = ScaleDown
AttDetGrid.RenderTransform = ScaleDown
e.PageVisual = CompChartGrid
e.HasMorePages = True
e.PageVisual = AttChartGrid
e.HasMorePages = True
e.PageVisual = CompDetGrid
e.HasMorePages = True
e.PageVisual = AttDetGrid
e.HasMorePages = False
End Sub
End Class
你快到了。诀窍在于,将为要打印的每个页面调用pd_PrintPage方法。在您的情况下,只打印最后一页,因为您正在覆盖预期的视觉效果 请尝试以下方法:
private void Button_Click(object sender, RoutedEventArgs e)
{
var doc = new PrintDocument();
var pages = new Stack<UIElement>();
pages.Push(AttDetGrid);
pages.Push(CompDetGrid);
pages.Push(AttChartGrid);
pages.Push(CompChartGrid);
doc.PrintPage += (x, y) =>
{
if (pages.Count > 0)
{
y.PageVisual = pages.Pop();
y.HasMorePages = pages.Count > 0;
}
};
doc.Print("My Printed document name");
}
private void按钮\u单击(对象发送者,路由目标)
{
var doc=新的PrintDocument();
var pages=新堆栈();
pages.Push(AttDetGrid);
pages.Push(CompDetGrid);
pages.Push(AttChartGrid);
pages.Push(CompChartGrid);
doc.PrintPage+=(x,y)=>
{
如果(pages.Count>0)
{
y、 PageVisual=pages.Pop();
y、 HasMorePages=页数。计数>0;
}
};
文件打印(“我打印的文件名”);
}
好的,我最后是这样做的:
Private Sub pd_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs) Handles pd.PrintPage
Static Counter As Integer = 1
If Counter = 1 Then
Dim PrintSurface As New Canvas
LayoutRoot.Children.Remove(Grid1)
PrintSurface.Children.Add(Grid1)
e.PageVisual = PrintSurface
Counter += 1
e.HasMorePages = True
Exit Sub
End If
If Counter = 2 Then
Dim PrintSurface As New Canvas
LayoutRoot.Children.Remove(Grid2)
PrintSurface.Children.Add(Grid2)
e.PageVisual = PrintSurface
Counter += 1
e.HasMorePages = True
Exit Sub
End If
If Counter = 3 Then
Dim PrintSurface As New Canvas
LayoutRoot.Children.Remove(Grid3)
PrintSurface.Children.Add(Grid3)
e.PageVisual = PrintSurface
Counter += 1
e.HasMorePages = True
Exit Sub
End If
If Counter = 4 Then
Dim PrintSurface As New Canvas
LayoutRoot.Children.Remove(Grid4)
PrintSurface.Children.Add(Grid4)
e.PageVisual = PrintSurface
Counter += 1
e.HasMorePages = True
Exit Sub
End If
If Counter = 5 Then
Dim PrintSurface As New Canvas
LayoutRoot.Children.Remove(Grid5)
PrintSurface.Children.Add(Grid5)
e.PageVisual = PrintSurface
Counter += 1
e.HasMorePages = True
Exit Sub
End If
If Counter = 6 Then
Dim PrintSurface As New Canvas
LayoutRoot.Children.Remove(Grid6)
PrintSurface.Children.Add(Grid6)
e.PageVisual = PrintSurface
e.HasMorePages = False
Exit Sub
End If
End Sub