2
如果我在自定義的WPF控件中調用InvalidateVisual
,那麼實際的佈局評估和渲染過程何時發生?InvalidateVisual是否以懶惰的方式工作?
立即或者 - 與WinForms類似 - 完成我的處理時?
如果我在自定義的WPF控件中調用InvalidateVisual
,那麼實際的佈局評估和渲染過程何時發生?InvalidateVisual是否以懶惰的方式工作?
立即或者 - 與WinForms類似 - 完成我的處理時?
在線幫助回答你的問題:
在線幫助InvalidateVisual:
此方法調用InvalidateArrange內部。
爲InvalidateArrange在線幫助:
的失效使元素的排列狀態(佈局)。無效後,元素將更新其佈局,將異步發生,除非隨後被UpdateLayout強制。
換句話說:InvalidateVisual
立即沒有效果;它會等到您的當前代碼完成(除非您撥打UpdateLayout)。
你也可以看看微軟的參考資料來源:http://referencesource.microsoft.com/#q=UIElement.InvalidateArrange。您會看到InvalidateArrange()
不會調用任何阻止碼;它立即返回。
請注意,InvalidateVisuals()比Form.Invalidate()要昂貴得多,因爲它會導致完全重新佈局。如果您想要在沒有佈局的情況下有效更新WPF視覺效果,請創建DrawingGroup「backingStore」,在OnRender()期間將其添加到DrawingContext中,然後在需要時更新DrawingGroup,並且它將有效地重新繪製UI。 –