SL 4 - 强制重绘可视树

时间:2010-08-31 11:48:32

标签: silverlight silverlight-4.0

我们的应用程序在画布上有许多对象;画布包含在滚动查看器中。我们还有一个滑块控件和一些按钮,总是位于窗口顶部的中心 我试图通过捕获应用程序的位图来打印应用程序,但没有任何“装饰” - 滑块,按钮或滚动条。

        _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事件处理程序中进行。

感谢您的任何建议......

2 个答案:

答案 0 :(得分:7)

尝试以下,

canvas.InvalidateMeasure();
canvas.InvalidateArrange();

如果打印文档忽略渲染变换,您也可以使用WritableBitmap捕获运行时图像并将图像发送到打印文档。

此外,如果您使用WritableBitmap捕获元素,那么您应该将RenderTransform作为第二个参数。你能把你的代码发布到捕获屏幕吗?

答案 1 :(得分:2)

除了Akash建议的InvalidateMeasure和InvalidateArrange方法之外,您还可以尝试使用UpdateLayout方法。

两个无效方法将标记控件的度量或安排为需要再次执行,但不一定立即执行。 UpdateLayout将强制它立即执行一些更新。

这是一个黑盒子,所以你可能需要无效然后调用UpdateLayout。有时您可能只需要调用UpdateLayout。