private void PrintFile_Click(object sender, RoutedEventArgs e)
        {
            var dlg    = new PrintDialog();
            var result = dlg.ShowDialog();

            if (result.HasValue && result.Value)
            {
                Mouse.OverrideCursor = Cursors.Wait;
                Transform originalScale = TreeGrid.LayoutTransform;

                //Get page size and scaling information from the printer
                var    capabilities   = dlg.PrintQueue.GetPrintCapabilities(dlg.PrintTicket);
                double PageMarginLeft = capabilities.PageImageableArea.OriginWidth;
                double PageMarginTop  = capabilities.PageImageableArea.OriginHeight;
                double PageWidth      = capabilities.PageImageableArea.ExtentWidth;
                double PageHeight     = capabilities.PageImageableArea.ExtentHeight;
                double printScale     = Math.Min((PageWidth - (PageMarginLeft * 2)) / TreeGrid.ActualWidth, (PageHeight - (PageMarginTop * 2)) / TreeGrid.ActualHeight) - .01;

                //Apply the scale
                TreeGrid.LayoutTransform = new ScaleTransform(printScale, printScale);

                //Print the image
                Size pageSize = new Size(PageWidth, PageHeight);
                TreeGrid.Measure(pageSize);
                TreeGrid.Arrange(new Rect(PageMarginLeft, PageMarginTop, pageSize.Width, pageSize.Height));
                dlg.PrintVisual(TreeGrid, "Root Cause Tree");

                //Restore the original scale
                TreeGrid.LayoutTransform = originalScale;
                Mouse.OverrideCursor     = null;
            }
        }