我一直在努力打印使用
System.Printing
命名空间.我终于弄清楚,当使用API的部分时,我获得空白的原因是因为我正在尝试打印的
Visual
对象未被加载/初始化.如果通过将Visual对象放在适当大小的Windows中并在打印之前调用Show()来显示Visual对象,则可以获得预期的结果.
public static void ShowVisual(Visual visual) { Window window = new Window { Content = visual,SizeToContent = SizeToContent.WidthAndHeight,Visibility = Visibility.Hidden }; window.Show(); window.Close(); }
这似乎是一个黑客,特别是因为用户简单地看到了Window-frame画面.我认为必须有一种不同的方式来实现.不过,我并没有提出任何其他解决方案.是否使用隐藏的窗口真的应该在这里完成?
使用WPF – Get size of UIElement in Memory?所述的MenuItem不起作用.我看着Force rendering of a WPF control in memory,但是我并不是真的想将Visual渲染到一个似乎是这样的位图.在wpf force to build visual tree中描述的图像上调用ApplyTemplate()没有帮助.
编辑:这是从上面使用而不是ShowVisual的解决方案
/// <remarks> /// This method needs to be called in order for // the element to print visibly at the correct size. /// </remarks> private static void ArrangeElement(UIElement element) { var Box = new ViewBox {Child = element}; Box.Measure(new Size(double.PositiveInfinity,double.PositiveInfinity)); Box.Arrange(new Rect(Box.DesiredSize)); }