void PrintLageplan (Window LagePlanWindow, bool WithProjektDescriptenOrWithout) { PrintDialog PrtDialog = new PrintDialog (); PrtDialog.PrintQueue = LocalPrintServer.GetDefaultPrintQueue (); PrtDialog.PrintTicket = PrtDialog.PrintQueue.DefaultPrintTicket; PrtDialog.PrintTicket.PageOrientation = PageOrientation.Landscape; if (PrtDialog.ShowDialog ().GetValueOrDefault (false)) { //get selected printer capabilities System.Printing.PrintCapabilities Capabilities = PrtDialog.PrintQueue.GetPrintCapabilities (PrtDialog.PrintTicket); //get scale of the print wrt to screen of WPF visual double scale = Math.Min (Capabilities.PageImageableArea.ExtentWidth / LagePlanWindow.ActualWidth, Capabilities.PageImageableArea.ExtentHeight / LagePlanWindow.ActualHeight); //Transform the Visual to scale LagePlanWindow.LayoutTransform = new ScaleTransform (scale, scale); //get the size of the printer page Size sz = new Size (Capabilities.PageImageableArea.ExtentWidth, Capabilities.PageImageableArea.ExtentHeight); //update the layout of the visual to the printer page size. LagePlanWindow.Measure (sz); LagePlanWindow.Arrange (new Rect (new Point (Capabilities.PageImageableArea.OriginWidth, Capabilities.PageImageableArea.OriginHeight), sz)); //now print the visual to printer to fit on the one page. PrtDialog.PrintVisual (LagePlanWindow, LagePlanWindow.Title); PrintMapDescription (PrtDialog, LagePlanWindow.Tag as List<List<Object>>); } }