当前位置: 首页 > 编程语言 > C#

如何知道何时在WPF中呈现(绘制)控件(或窗口)?分享

时间:2023-04-11 01:34:48 C#

WPF中如何知道何时渲染(绘制)控件(或窗口)?我需要将窗口的内容存储到图像中,保存并关闭窗口。如果我在Loaded事件上关闭窗口,图像包含窗口,它的一些项目绘制得很好,其他项目只绘制了一半或扭曲,其他项目不在图像中。如果我放置一个计时器并在一定时间后关闭窗口(在250毫秒到1秒之间,具体取决于窗口的复杂性),图像就很好。看起来窗口需要一些时间才能完全呈现。有没有办法知道此渲染何时完成,以避免在我们知道渲染完成时使用Timer并关闭窗口?谢谢。我认为您正在寻找ContentRendered事件我在我正在处理的应用程序中遇到了类似的问题,我使用以下代码解决了它,请尝试一下,如果有帮助请告诉我。using(newHwndSource(newHwndSourceParameters()){RootVisual=(VisualTreeHelper.GetParent(objToBeRendered)==null?objToBeRendered:null)}){//刷新调度程序队列objToBeRendered.Dispatcher.Invoke(DispatcherPriority.SystemIdle,newAction(()=>{}));varrenderBitmap=newRenderTargetBitmap(requiredWidth,requiredHeight,96d*requiredWidth/actualWidth,96d*requiredHeight/actualHeight,PixelFormats.Default);renderBitmap.Render(objToBeRendered);renderBitmap.Freeze();返回渲染位图;我在SizeChanged上使用了这个方法。publicpartialclassMyUserControl:UserControl{publicMyUserControl(){InitializeComponent();SizeChanged+=UserControl_DoOnce;//register}privatevoidUserControl_DoOnce(objectsender,SizeChangedEventArgse){if(ActualHeight>0)//一旦对象有大小,它就被渲染了。{SizeChanged-=UserControl_DoOnce;//Unregistersoonlydoneonce}}}这是我发现在不引用Window的情况下从控件可靠工作的唯一方法。以上就是C#学习教程:WPF中如何知道何时渲染(绘制)控件(或窗口)?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: