WPF C# Tutorial

  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1">
  
    
      
      
    

    
  

//File:Window.xaml.cs
using System;
using System.Printing;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Xps;
namespace WpfApplication1
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }
        private void btnPrintVisual_Click(object sender, RoutedEventArgs e)
        {
            Visual visual = new Grid();
            
            PrintDialog printDialog = new PrintDialog();
            if (printDialog.ShowDialog() != true)
            {
                return;
            }
            PrintQueue pq = printDialog.PrintQueue;
            Visual scaledVisual = ScaleVisual(visual, pq);
            
            XpsDocumentWriter xpsdw = PrintQueue.CreateXpsDocumentWriter(pq);
            xpsdw.Write(scaledVisual);
        }
        private Visual ScaleVisual(Visual v, PrintQueue pq)
        {
            ContainerVisual root = new ContainerVisual();
            const double inch = 96;
            double xMargin = 150;
            double yMargin = 100;
            PrintTicket pt = pq.UserPrintTicket;
            double printableWidth = pt.PageMediaSize.Width.Value;
            double printableHeight = pt.PageMediaSize.Height.Value;
            Console.WriteLine(printableWidth);
            Console.WriteLine(printableHeight);
            
            double xScale = 2;
            double yScale = 3;
            root.Children.Add(v);
            root.Transform = new MatrixTransform(xScale, 0, 0, yScale, xMargin, yMargin);
            return root;
        }
    }
}