我正在尝试捕获不在可见树中的 WebBrowser 控件的内容,但 WriteableBitmap.Render() 正在捕获所有黑色像素的(大小正确)位图。如果我将 WebBrowser 放入可视化树中,则捕获工作正常。
WriteableBitmap 文档强调它适用于不在可视树中的控件,并且我正在对 Measure() 和 Arrange() 进行必要的调用。相关代码(最初在 WebBrowser_LoadCompleted 事件中,用于演示移至 renderButton_OnClick)
hiddenBrowser.Measure(new Size(hiddenBrowser.Width, hiddenBrowser.Height)); // pretend there's plenty of space.
hiddenBrowser.Arrange(new Rect(0.0, 0.0, hiddenBrowser.Width, hiddenBrowser.Height)); // pretend we know where this is going.
//noHelp hiddenBrowser.UpdateLayout();
WriteableBitmap _bitmap = new WriteableBitmap((int)theImage.Width, (int)theImage.Height);
_bitmap.Render(hiddenBrowser, new ScaleTransform());
_bitmap.Invalidate();
theImage.Source = _bitmap;
演示该问题的完整项目位于:https ://skydrive.live.com/redir?resid=193BF22F5BBA1A84!10526&authkey=!AGeH6YC_NttOmj0
按 Unhide(webBrowser 显示在可视树中),然后按 Go,然后按 Render --> render captures OK。然后按 Hide(webBrowser 消失),然后按 Go,然后按 Render --> Black Screen of Ignorance。
最初,我认为这是一个时间问题(例如,即使 LoadComplete 事件触发,浏览器可能还没有完成网页绘制),但事实并非如此;在演示中,我等待 10 秒,然后按下执行渲染的“渲染”按钮,但仍然得到黑色图像。