我需要打印一个Silverlight UserControl的屏幕截图,我已经尝试过使用PrintDocument的常规方法,但不幸的是它花了太长时间,因为它必须在UI线程上发生,整个应用程序也被锁定了长。这需要很长时间,因为控件包含需要在许多页面上测量和打印的网格。
所以我正在寻找一种方法来做到这一点,而无需锁定UI线程。有没有什么办法可以在后台线程上再次渲染这些控件(与原始渲染的可见控件分开)?然后计划将这些发送到PrintDocument,或者如果无法使用WritableBitmap截取它们的截图。
我已经快速离开,但当然我总是遇到线程亲和力问题。鉴于我不希望这些控件对用户可见,虽然我希望有办法解决这个问题?
干杯
答案 0 :(得分:0)
您可以使用WriteableBitmap
获取对要引用的根元素的引用。如果要根据需要从外部源动态加载XAML,可以使用XamlReader
。称之为ScreenshotRoot
WriteableBitmap bmp = new WriteableBitmap(ScreenshotRoot.RenderSize.Width, ScreenshotRoot.RenderSize.Height)
bmp.Render(ScreenshotRoot, new MatrixTransform());
bmp.Invalidate();
您应该可以在另一个帖子中执行此操作。