DependencyProperty
1.依賴屬性介紹:
簡單來說就是Xaml上控件的屬性。基本.net內建控鍵的屬性大都是依賴屬性。要在WPF自訂義控件依賴屬性是絕對必要的,因為控件沒有依賴屬性將無法於Xaml上來做設定屬性,並缺少子層與父層的依賴關西,也就是說無法參考父層或本身的屬性在Xaml內的屬性值。
依賴解釋:xaml內控件的父層容器屬性;控件自身屬性都是依賴屬性可以參考的範圍內,並可指定控件名稱 或是 類型 依照所要依賴的關西來找尋要參考的屬性值。
2.優點:
可在View的前端(Xaml)定義完成父子層有關聯的屬性,可增加Xaml的維護性,前端View應該盡量在xaml內完成,要盡量避免到後端Source的地方取值,才能使View層跟資料層的的區隔更加清楚。
3.實作說明
3-1 以下專案類型為WPF4,舉一例子簡述依賴屬性所具有的基本能力:
Code說明:將TextBlock的Text屬性 綁定到父層Windows的Title。
Text為依賴屬性固可以設定向父層尋找型別為Windows的Title屬性。由於Text與Title都是string類型固可依賴賦值。
<TextBlock FontSize="36" Text="{Binding Path=目標屬性,
RelativeSource={RelativeSource AncestorType={x:Type 要參考的類型}, Mode=設定依賴關西(此為向上層尋找)}}"/>
輸出結果:
提醒:
舉凡是依賴屬性只要沒有賦值就會往賦層尋找相同屬性參考。例如xaml內控件的字形會自動參考父層容器字型。
3-2依賴屬性製作:
上面有提到依賴屬性可參考父層及本身的屬性,這意味著它擁有分享的特性,在xaml內一定會有父層容器與子層容器的關聯,可以藉由依賴關西來參考。
轉個想法想,就是.net底層把xaml中的控件屬性都存在靜態空間內,所以可以藉由依賴屬性存取這些資源。
所以在產生依賴屬性時,要用靜態的方法。
宣告:
//自訂義依賴屬性名稱+Property 這是規則
public static readonly DependencyProperty MyHeightProperty ;
以下範例講解依賴屬性:
說明:
產生一新的使用者控件TextBlockUserControl繼承於TextBlock,並給予新的依賴屬性。
功能:
產生一新屬性MyHeight為int類型,並讓此屬性的值由依賴上層Window的Height,返回給Text顯示出。
輸出
小結:
在WPF內自定義控件的好用將取之於對控件的依賴屬性上。
要在Xaml內對自訂義控件屬性必須要做依賴屬性或者是附加屬性。
晚點在分享一對於附加屬性的心得。
By-藍小伙




