如何知道WPF中何时渲染(绘制)控件(或窗口)?

我需要将Window的内容存储到图像中,保存并关闭窗口。 如果我在Loaded事件上关闭窗口,图像包含窗口,其中一些项目被绘制好,其他一些只是一半绘制或扭曲而其他项目不在图像上。

如果我放一个计时器并在一定时间后关闭窗口(根据窗口的复杂程度,在250毫秒和1秒之间),图像都可以。

看起来窗口需要一些时间来完全渲染自己。 有没有办法知道何时完成此渲染以避免使用Timer并在我们知道它已完成渲染时关闭窗口?

谢谢。

我认为您正在寻找ContentRendered事件

我在我正在使用的应用程序中遇到了类似的问题,我通过使用以下代码解决了它,尝试它并让我知道它是否有帮助。

using (new HwndSource(new HwndSourceParameters()) { RootVisual = (VisualTreeHelper.GetParent(objToBeRendered) == null ? objToBeRendered : null) }) { // Flush the dispatcher queue objToBeRendered.Dispatcher.Invoke(DispatcherPriority.SystemIdle, new Action(() => { })); var renderBitmap = new RenderTargetBitmap(requiredWidth, requiredHeight, 96d*requiredWidth/actualWidth, 96d*requiredHeight/actualHeight, PixelFormats.Default); renderBitmap.Render(objToBeRendered); renderBitmap.Freeze(); return renderBitmap; } 

我在SizeChanged上使用了这个方法。

 public partial class MyUserControl: UserControl { public MyUserControl() { InitializeComponent(); SizeChanged += UserControl_DoOnce; //register } private void UserControl_DoOnce(object sender, SizeChangedEventArgs e) { if (ActualHeight > 0)//Once the object has size, it has been rendered. { SizeChanged -= UserControl_DoOnce; //Unregister so only done once } } } 

这是我发现在没有引用Window的情况下从控件可靠地工作的唯一方法。