在.net framework 2.0 or 3.0 沒辦法Compile Extension Method怎麼辦?
很簡單 在幾行code就可以了
namespace System.Runtime.CompilerServices
{
public class ExtensionAttribute : Attribute { }
}
方法是從下面的blog來的
The Moth: Using Extension methods in Fx 2.0 projects
常常在寫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的話
原始文章在
Mike Hillberg's Blog on Wpf (.Net and Silverlight) : The Loaded event and the Initialized event