我们的应用程序在画布上有许多对象;画布包含在滚动查看器中。我们还有一个滑块控件和一些按钮,总是位于窗口顶部的中心 我试图通过捕获应用程序的位图来打印应用程序,但没有任何“装饰” - 滑块,按钮或滚动条。
_scrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden;
_scrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden;
var s = xSlider;
s.Visibility = Visibility.Collapsed;
var b = xPlusButton;
b.Visibility = Visibility.Collapsed;
b = xMinusButton;
b.Visibility = Visibility.Collapsed;
b = xButton;
b.Visibility = Visibility.Collapsed;
按预期隐藏滑块和按钮,但滚动条不是。
我怀疑应用程序需要重新绘制布局才能隐藏滚动条。有没有办法让这种情况发生?由于SL 4中的打印操作必须由UI手势启动,因此这变得更加复杂。没有办法(AFAIK)以编程方式启动,因此这个重绘必须在其中一个PrintDocument事件处理程序中进行。
感谢您的任何建议......
答案 0 :(得分:7)
尝试以下,
canvas.InvalidateMeasure();
canvas.InvalidateArrange();
如果打印文档忽略渲染变换,您也可以使用WritableBitmap捕获运行时图像并将图像发送到打印文档。
此外,如果您使用WritableBitmap捕获元素,那么您应该将RenderTransform作为第二个参数。你能把你的代码发布到捕获屏幕吗?
答案 1 :(得分:2)
除了Akash建议的InvalidateMeasure和InvalidateArrange方法之外,您还可以尝试使用UpdateLayout方法。
两个无效方法将标记控件的度量或安排为需要再次执行,但不一定立即执行。 UpdateLayout将强制它立即执行一些更新。
这是一个黑盒子,所以你可能需要无效然后调用UpdateLayout。有时您可能只需要调用UpdateLayout。