2

wpf アプリケーションからいくつかの情報を出力しようとしています。印刷したいものを 1 ページに収まるようにするためのコードを見つけましたが、非常にうまく機能します。問題は、私が欲しいものを印刷した後、メソッドがグラフを含むグループボックスである wpf-control をダウンスケールすることです。グループボックスのサイズをスケーリング前のサイズに戻すにはどうすればよいですか?

private void PrintUT_Click(object sender, RoutedEventArgs e)
    {
        PrintDialog printDlg = new System.Windows.Controls.PrintDialog();
        if (printDlg.ShowDialog() == true)
        {
            //get selected printer capabilities
            System.Printing.PrintCapabilities capabilities = printDlg.PrintQueue.GetPrintCapabilities(printDlg.PrintTicket);

            //get scale of the print wrt to screen of WPF visual
            double scale = Math.Min(capabilities.PageImageableArea.ExtentWidth / this.GBProsjektTimer.ActualWidth, capabilities.PageImageableArea.ExtentHeight /
                           this.GBProsjektTimer.ActualHeight);

            //Transform the Visual to scale
            this.GBProsjektTimer.LayoutTransform = new ScaleTransform(scale, scale);

            //get the size of the printer page
            Size sz = new Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight);

            //update the layout of the visual to the printer page size.
            this.Measure(sz);
            this.Arrange(new Rect(new Point(capabilities.PageImageableArea.OriginWidth, capabilities.PageImageableArea.OriginHeight), sz));

            //now print the visual to printer to fit on the one page.
            printDlg.PrintVisual(this.GBProsjektTimer, "First Fit to Page WPF Print");
        }
    }
4

1 に答える 1

0

答えが見つかりました!objecToPrint をオブジェクトに置き換えるだけです。私の場合、それはthis.GBProsjektTimer.Width = double.Nan

                    objectToPrint.Width = double.NaN;
                objectToPrint.UpdateLayout();
                objectToPrint.LayoutTransform = new ScaleTransform(1, 1);
                Size size = new Size(capabilities.PageImageableArea.ExtentWidth, 
                                     capabilities.PageImageableArea.ExtentHeight);
                objectToPrint.Measure(size);
                objectToPrint.Arrange(new Rect(new Point(capabilities.PageImageableArea.OriginWidth, 
                                      capabilities.PageImageableArea.OriginHeight), size));
于 2013-04-05T13:07:46.190 に答える