You need to combine the information from PrintDocumentImageableArea with the members Measure and Arrange on the UIElement :
// I could not find another way to change the margins other than the dialog var result = printDialog.ShowDialog(); if (result.HasValue && result.Value) { var queue = printDialog.PrintQueue; // Contains extents and offsets var area = queue.GetPrintCapabilities(printDialog.PrintTicket) .PageImageableArea; // scale = area.ExtentWidth and area.ExtentHeight and your UIElement bounds // margin = area.OriginWidth and area.OriginHeight // 1. Use the scale in your ScaleTransform // 2. Use the margin and extent information to Measure and Arrange // 3. Print the visual }
source share