Printing viewport

时间秒杀一切 提交于 2019-12-06 15:56:57

The following worked, now the picture get scaled to the size of the paper regardless of the size of the viewport

...

        PrintDialog dialog = new PrintDialog();

        if (dialog.ShowDialog() != true)
        { 
            return; 
        }


        Grid grid = new Grid();

        grid.Margin = new Thickness(40);

        //do this for each column
        ColumnDefinition coldef;
        coldef = new ColumnDefinition();
        coldef.Width = new GridLength(dialog.PrintableAreaWidth, GridUnitType.Pixel);
        grid.ColumnDefinitions.Add(coldef);

        //do this for each row
        RowDefinition rowdef;
        rowdef = new RowDefinition();
        rowdef.Height = new GridLength(1, GridUnitType.Auto);
        grid.RowDefinitions.Add(rowdef);
        //
        rowdef = new RowDefinition();
        rowdef.Height = new GridLength(1, GridUnitType.Auto);
        grid.RowDefinitions.Add(rowdef);

        TextBlock myTitle = new TextBlock();
        myTitle.FontSize = 24;
        myTitle.FontFamily = new FontFamily("Arial");
        myTitle.TextAlignment = TextAlignment.Center;
        myTitle.Text = myName;

        grid.Children.Add(myTitle);
        //put it in column 0, row 0
        Grid.SetColumn(myTitle, 0);
        Grid.SetRow(myTitle, 0);

        Image myImage = new Image();
        RenderTargetBitmap bmp = new RenderTargetBitmap((int)this.Width, (int)this.Height, 96, 96, PixelFormats.Pbgra32);
        bmp.Render(myViewPort);

        myImage.Source = bmp;
        myImage.Stretch = Stretch.Uniform;

        grid.Children.Add(myImage);
        //put it in column 0, row 1
        Grid.SetColumn(myImage, 0);
        Grid.SetRow(myImage, 1);

        grid.Measure(new Size(dialog.PrintableAreaWidth, dialog.PrintableAreaHeight));
        grid.Arrange(new Rect(new Point(0, 0), grid.DesiredSize));

        dialog.PrintVisual(grid, myName);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!