<Window x:Class="Printing.PrintVisual" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="PrintVisual" Height="259" Width="282"> <StackPanel> <Canvas Name="canvas"> <TextBlock Canvas.Top="50" Canvas.Left="20" FontSize="25" FontWeight="Bold">Hello There</TextBlock> <Path Fill="Yellow" Stroke="Blue" Margin="5" Canvas.Top="10" Canvas.Left="10" > <Path.Data> <GeometryGroup> <RectangleGeometry Rect="0 0 100 100"></RectangleGeometry> <EllipseGeometry Center="50 50" RadiusX="35" RadiusY="25"></EllipseGeometry> </GeometryGroup> </Path.Data> </Path> </Canvas> <Button Grid.Row="3" Click="cmdPrint_Click">Print</Button> </StackPanel> </Window> //File:Window.xaml.cs using System; using System.Collections.Generic; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; namespace Printing { public partial class PrintVisual : System.Windows.Window { public PrintVisual() { InitializeComponent(); } private void cmdPrint_Click(object sender, RoutedEventArgs e) { PrintDialog printDialog = new PrintDialog(); if (printDialog.ShowDialog() == true) { double zoom = 30; canvas.Background = Brushes.LightSteelBlue; canvas.LayoutTransform = new ScaleTransform(zoom / 100, zoom / 100); Size pageSize = new Size(printDialog.PrintableAreaWidth - 20, printDialog.PrintableAreaHeight - 20); canvas.Measure(pageSize); canvas.Arrange(new Rect(10, 10, pageSize.Width, pageSize.Height)); printDialog.PrintVisual(canvas, "A Scaled Drawing"); canvas.Background = null; canvas.LayoutTransform = null; } } } }