微軟發布visual studio 2012 rc和windows 8 release preview版本,從本篇開始,所有例項將基於最新版本開發工具vs2012 rc和win 8 rp版。
在 上幾篇xaml例項教程中,分別介紹xaml物件,屬性以及命名空間的概念。從這篇開始,將討論常見的xaml高階話題,其中包括依賴屬性 (dependency properties), 附加屬性(attached properties), 事件處理(event)等。這些話題是windows 8和silverlight實際專案中經常用到的開發知識,也是xaml開發語言的精華。
依賴屬性(dependency properties)
依 賴屬性,英文稱為dependency properties,是windows 8,silverlight特有的屬性系統。在傳統.net應用開發中,clr屬性是物件導向程式設計的基礎,主要提供對私有欄位的訪問封裝,開發人員可以使 用get和set訪問器實現讀寫屬性操作。在windows 8應用開發中,依賴屬性和clr屬性類似,同樣提供乙個例項級私有欄位的訪問封裝,通過getvalue和setvalue訪問器實現屬性的讀寫操作。依賴屬性最重要的乙個特點是屬性值依賴於乙個或者多個資料來源,提供這些資料來源的方式也可以不同,例如,通過資料繫結提供資料來源,通過動畫,模板資源,樣式等方式提供資料來源等,在不同的方式資料來源下,依賴屬性可以實時對屬性值進行改變。也正是因為依賴多資料來源的緣故,所以稱之為依賴屬性。
依賴屬性可以通過多種不同型別的資料來源進行賦值,其賦值順序的不同影響著屬性值的改變。為了能夠獲取準確的依賴屬性值,需要了解不同資料來源的優先級別,如下圖:
1. 從圖中可以看到,應用動畫占有對以來屬性控制的最高優先順序,簡單理解,無論動畫**定義在當前頁面內,還是定義在模板**內,動畫都將獲得對頁面內依賴屬性的最優先控制權。
2. 次一級優先權是依賴屬性本地化操作,分別包括其中包括依賴屬性賦值,資料繫結,資源引用等。依賴屬性使用方式和clr屬性使用類似,可以使用以下格式對依賴屬性進行賦值操作:
元素物件.依賴屬性 = 屬性值
例如: 按鈕控制項中,寬度屬性屬於依賴屬性(隨後例項詳解),其賦值方法是: button.width = 160;
3. 第三優先權是資料模板和控制項模板對依賴屬性的控制;
4. 其次是樣式控制器對依賴屬性的控制優先權;
5. 最低的依賴屬性控制優先權是在定義依賴屬性時使用getvalue和setvalue對屬性預設的賦值。
開發人員可以通過對依賴屬性不同優先權的控制,操作頁面屬性值,使控制項或者頁面達到需求執行效果。
該例項仍舊使用前幾篇中的xamlguide專案演示,移植到visual studio 2012 rc平台,
定義乙個簡單使用者控制項樣式 - buttonstyle,在樣式**中,定義了按鈕的內容文字顏色(foreground)為「black」黑色,另外定義字型尺寸(fontsize)為24pt, 同時定義按鈕文字內容(content)是「xaml依賴屬性測試」:
如果應用以上資源樣式到本地按鈕控制項,執行結果如下:
但 是,如果在中定義乙個按鈕控制項,在該按鈕控制項中,定義按鈕文字內容(content)為「xaml依賴屬性測試」,定義按鈕內容 文字顏色(foreground)為「yellow」黃色,按鈕文字字型尺寸(fontsize)為14pt,按鈕寬度(width)為200,同時呼叫 靜態資源樣式buttonstyle.
最終執行結果如下:
根據前文講述的依賴屬性執行優先順序,按鈕控制項本地賦值優先於控制項樣式,所以以上**中,忽略了buttonstyle樣式,應用本地依賴屬性值生成不同結果。
xaml的附加屬性(attached properties)
attached properties,中文稱為附加屬性,該屬性是一種特殊的依賴屬性,同時也是xaml中特有的屬性之一。其語法呼叫格式如下:
《控制項元素物件 附加元素物件.附加屬性名 = 屬性值 />
我 們可以通過以下幾個例項理解附加屬性,例如,在布局控制項canvas中定義乙個按鈕控制項,而按鈕本身沒有任何屬性可以控制其在布局控制項canvas中的位 置,而在canvas中,定義了兩個依賴屬性作為按鈕控制項的附加屬性,幫助按鈕控制在canvas中的位置,其**如下:
<
canvas
>
<
button
canvas.left
=」25」
canvas.top
=」30」
/>
canvas
>
在控制項中,使用了「canvas.附加屬性」,效果如同按鈕控制項從布局控制項中繼承了left和top兩個屬性值,這時儘管這兩個屬性仍舊屬於canvas控制項,但是屬性值已經附加到了按鈕控制項上,並產生了效果。
另外乙個附加屬性的例項是tooltipservice工具提示服務控制項,預設控制項生成,不具備動態提示功能,而如果在控制項中附加了tooltipservice.tooltip屬性,就可以生成動態顯示指定提示內容的效果。例如:
<
grid
x:name
="layoutroot"
background=""
>
<
button
content
="xaml依賴屬性測試"
style=""
foreground
="yellow"
width
="240"
fontsize
="14"
tooltipservice.tooltip
="附加屬性效果演示"
/>
grid
>
和布局控制項的left和top道理相同,按鈕控制項中並沒有tooltip屬性,只是附加或者可以理解為「繼承」了tooltipservice類,生成以上效果。
從以上示例可以看出,附加屬性主要目的是為了簡化**,增強xaml**對元素物件的控制。通過對已知類屬性的「繼承」或者「附加」,在元素物件上實現特有的效果。
附加屬性的應用還有許多例如動畫故事板對目標屬性的控制storyboard.targetproperty,grid布局控制項的行和列的控制(row和column)等。
xaml例項教程系列:
xaml例項教程系列 - 開篇
xaml例項教程系列 - 物件和屬性
xaml例項教程系列 - 命名空間(namespace)
22308706(一群) 超級群500人
37891947(二群) 超級群500人
100844510(三群) 高階群200人
32679922(四群) 超級群500人
23413513(五群) 高階群200人
32679955(六群) 超級群500人
88585140(八群) 超級群500人
128043302(九群 企業應用開發推薦群) 高階群200人
101364438(十群) 超級群500人
68435160(十一群 企業應用開發推薦群)超級群500人
XAML例項教程系列 依賴屬性和附加屬性
微軟發布visual studio 2012 rc和windows 8 release preview版本,從本篇開始,所有例項將基於最新版本開發工具vs2012 rc和win 8 rp版。在 上幾篇xaml例項教程中,分別介紹xaml物件,屬性以及命名空間的概念。從這篇開始,將討論常見的xaml高...
XAML例項教程系列 依賴屬性和附加屬性
微軟發布visual studio 2012 rc和windows 8 release preview版本,從本篇開始,所有例項將基於最新版本開發工具vs2012 rc和win 8 rp版。在 上幾篇xaml例項教程中,分別介紹xaml物件,屬性以及命名空間的概念。從這篇開始,將討論常見的xaml高...
XAML例項教程系列 依賴屬性和附加屬性
在 上幾篇xaml例項教程中,分別介紹xaml物件,屬性以及命名空間的概念。從這篇開始,將討論常見的xaml高階話題,其中包括依賴屬性 dependency properties 附加屬性 attached properties 事件處理 event 等。這些話題是windows 8和silverl...