星期五, 6月 13, 2008

[C#] Using Extension Methods in .net framework 2.0



在.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

星期日, 6月 01, 2008

[WPF] Initialized v.s. Loaded


常常在寫WPF的時候 搞不懂何時要用Loaded,何時要用Initialized

這一篇有十分詳盡的解說.........

In Summary

Initialized

--> Initialized
Loaded早很多,他的時機點是所有的Propertysetup好了

-->
會被raised是因為呼叫了ISupportInitialize.EndInit.... FrameworkElemtn有實現這個interface(在load XAML的時候,是BAML Loader call)

-->
如果是自己寫code去生成,而且沒呼叫EndInit,為什麼還是有呢? 因為在串Visual Tree的時候,任何Uninitializedchildren串到Parent的時候,都會先被Initialized (根據 IsInitializedproperty),那如果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