【发布时间】:2011-12-17 10:23:29
【问题描述】:
我搜索了如何打印 WPF 控件的选项并找到了一些解决方案。我确实需要在保持纵横比的同时使打印的控件适合打印页面(我的控件是方形的;数独网格)。
我找到了一种解决方案,可以调整控件的大小和位置以适应页面。这很好用,但它也会在我的窗口上重新定位该控件。
这是我用于打印和缩放的代码:
//get selected printer capabilities
System.Printing.PrintCapabilities capabilities = dialog.PrintQueue.GetPrintCapabilities(dialog.PrintTicket);
//get scale of the print wrt to screen of WPF visual
double scale = Math.Min(capabilities.PageImageableArea.ExtentWidth / mrizka.ActualWidth, capabilities.PageImageableArea.ExtentHeight / mrizka.ActualHeight);
//Transform the Visual to scale
mrizka.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.
mrizka.Measure(sz);
mrizka.Arrange(new Rect(new Point(capabilities.PageImageableArea.OriginWidth, capabilities.PageImageableArea.OriginHeight), sz));
dialog.PrintVisual(mrizka, mrizka.getID().ToString());
我尝试了两种方法来解决这个问题:
克隆我的控件,然后转换克隆的控件,不影响原始控件。 没用,由于某种原因,我以异常结束:提供的 DependencyObject 不是此 Freezable 的上下文,但奇怪的是仅在某些情况下。
还原大小和位置更改。我尝试调用 InvalidateArrange() 方法,该方法似乎有效,但仅在第一次调用 print 方法期间。在第二次通话期间,它没有工作。
请问我该怎么办,有什么想法
【问题讨论】: