屬性和事件是.NET抽象模型的核心部分, 而WPF中則用更高級的依賴項屬性(Dependency Property)代替了原來.NET中的屬性.依賴項屬性主要應用於自定義元素中,用於爲自定義元素注入自定義的屬性.
以下是定義和註冊依賴項屬性的方法:
//聲明並註冊依賴項屬性 FoodProperty public static DependencyProperty FoodProperty = DependencyProperty.Register("Food", typeof(Food), typeof(FoodManager), new FrameworkPropertyMetadata(new PropertyChangedCallback(OnFoodChanged)));
調用DependencyProperty.Register()靜態方法爲依賴項屬性註冊,在這個方法中,有5個參數:屬性名(上面的"Food"),屬性使用的數據類型,擁有該屬性的類,一個具有附加屬性設置的FrameworkPropertyMetadata對象(上面的FrameworkPropertyMetadata對象中傳入了一個屬性改變時的回調函數),一個用於驗證屬性的回調函數. 其中,後面2個是可選的.
然後添加屬性包裝器:
Public Food Food { get{ return (Food)GetValue(FoodProperty);} set{ SetValue(FoodProperty,value);} }
如果是自定義元素,添加屬性包裝器後, 在使用控件時就能使用該屬性. 當然, 如果要在屬性變化時觸發代碼, 就要實現註冊依賴項屬性時的回調函數(本例中的OnFoodChanged()).
上面只是依賴項屬性的部分內容, 依賴項屬性還可以插入其它WPF服務, 以及支持驗證回調和強制回調.
PS: 當你爲自定義元素注入一個枚舉類型的依賴項屬性時, 會出現一個很方便有趣的現象: VS2010的編輯器會把枚舉類型中的內容列舉出來, 以供你選擇. 就好像你給Border設置Background一樣.
建議學習WPF的人去看《WPF編程寶典》, 內容實在太全面了, 而且每一章節都有對應的源碼.