常常在寫WPF的時候 搞不懂何時要用Loaded,何時要用Initialized
這一篇有十分詳盡的解說.........
In Summary
Initialized
--> Initialized比Loaded早很多,他的時機點是所有的Property都setup好了
--> 會被raised是因為呼叫了ISupportInitialize.EndInit.... FrameworkElemtn有實現這個interface(在load XAML的時候,是BAML Loader call的)
--> 如果是自己寫code去生成,而且沒呼叫EndInit,為什麼還是有呢? 因為在串Visual Tree的時候,任何Uninitialized的children串到Parent的時候,都會先被Initialized (根據 IsInitialized的property),那如果root怎麼呢? 唔...root最後會被串到PresentationSource
--> Initialized的順序是bottom-up,即children會先被叫起來,反之Loaded是從Top-down, 即從上到下....
Loaded
--> 被raised的時候,意味已經準備可以render了,所以ActualWidth, Layout Measurement, data-bound property都已經ready了
--> 順序是Top-Bottom
另外文章中提到....Proprety引發Event的關係,意即
IsInitialized --> Initialized Event
IsLoaded --> Loaded Event
舉個例子 如果XAML是如此寫的話
Page裡有一個Button的話
- Button.IsInitialized goes true
- Button.Initialized event is raised
- Page.IsInitialized goes true
- Page.Initialized event is raised
- Page IsLoaded goes to true
- Button IsLoaded goes to true
- Page.Loaded is raised
- Button.Loaded is raised
原始文章在
Mike Hillberg's Blog on Wpf (.Net and Silverlight) : The Loaded event and the Initialized event
沒有留言:
張貼留言