2014-07-09 15 views
2

如果我在自定義的WPF控件中調用InvalidateVisual,那麼實際的佈局評估和渲染過程何時發生?InvalidateVisual是否以懶惰的方式工作?

立即或者 - 與WinForms類似 - 完成我的處理時?

+0

請注意,InvalidateVisuals()比Form.Invalidate()要昂貴得多,因爲它會導致完全重新佈局。如果您想要在沒有佈局的情況下有效更新WPF視覺效果,請創建DrawingGroup「backingStore」,在OnRender()期間將其添加到DrawingContext中,然後在需要時更新DrawingGroup,並且它將有效地重新繪製UI。 –

回答

3

在線幫助回答你的問題:

在線幫助InvalidateVisual

此方法調用InvalidateArrange內部。

InvalidateArrange在線幫助:

的失效使元素的排列狀態(佈局)。無效後,元素將更新其佈局,將異步發生,除非隨後被UpdateLayout強制。

換句話說:InvalidateVisual立即沒有效果;它會等到您的當前代碼完成(除非您撥打UpdateLayout)。

你也可以看看微軟的參考資料來源:http://referencesource.microsoft.com/#q=UIElement.InvalidateArrange。您會看到InvalidateArrange()不會調用任何阻止碼;它立即返回。