Vb.net 将4个网格打印到4张纸上

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

使用Silverlight 5和VB.Net,我试图从LayoutRoot打印4个网格到4张单独的纸,如下所示,但我只打印最后一个网格。我明白为什么,但我应该怎么做?我将网格缩放到其原始大小的75%,因为这样可以使网格适合于面向肖像的纸张宽度

谢谢

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