-1

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
4

2 に答える 2

0

あなたはもうすぐそこにいます。秘訣は、印刷するページごとに 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");
}
于 2013-02-15T07:38:52.043 に答える
-1

OK、私は最終的にこのようにしました:

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
于 2013-02-15T13:25:17.920 に答える