微軟發布Visual Studio 2012 RC和Windows 8 Release Preview版本,從本篇開始,所有實例將基於最新版本開發工具VS2012 RC和Win 8 RP版。
下載Visual Studio 2012 RC :
在上幾篇XAML實例教程中,分別介紹XAML對象,屬性以及命名空間的概念。從這篇開始,將討論常見的XAML高級話題,其中包括依賴屬性(Dependency Properties), 附加屬性(Attached Properties), 事件處理(Event)等。這些話題是Windows 8和Silverlight實際項目中經常用到的開發知識,也是XAML開發語言的精華。
依賴屬性(Dependency Properties)
依賴屬性可以通過多種不同類型的數據源進行賦值,其賦值順序的不同影響着屬性值的改變。為了能夠獲取准確的依賴屬性值,需要了解不同數據源的優先級別,如下圖:
1. 從圖中可以看到,應用動畫占有對以來屬性控制的最高優先級,簡單理解,無論動畫代碼定義在當前頁面內,還是定義在模板代碼內,動畫都將獲得對頁面內依賴屬性的最優先控制權。
2. 次一級優先權是依賴屬性本地化操作,分別包括其中包括依賴屬性賦值,數據綁定,資源引用等。依賴屬性使用方式和CLR屬性使用類似,可以使用以下格式對依賴屬性進行賦值操作:
元素對象.依賴屬性 = 屬性值
例如: 按鈕控件中,寬度屬性屬於依賴屬性(隨后實例詳解),其賦值方法是: Button.Width = 160;
3. 第三優先權是數據模板和控件模板對依賴屬性的控制;
4. 其次是樣式控制器對依賴屬性的控制優先權;
5. 最低的依賴屬性控制優先權是在定義依賴屬性時使用GetValue和SetValue對屬性默認的賦值。
開發人員可以通過對依賴屬性不同優先權的控制,操作頁面屬性值,使控件或者頁面達到需求運行效果。
該實例仍舊使用前幾篇中的XamlGuide項目演示,移植到Visual Studio 2012 RC平台,
如果應用以上資源樣式到本地按鈕控件,運行結果如下:


最終運行結果如下:
<控件元素對象 附加元素對象.附加屬性名 = 屬性值 />
我們可以通過以下幾個實例理解附加屬性,例如,在布局控件Canvas中定義一個按鈕控件,而按鈕本身沒有任何屬性可以控制其在布局控件Canvas中的位置,而在Canvas中,定義了兩個依賴屬性作為按鈕控件的附加屬性,幫助按鈕控制在Canvas中的位置,其代碼如下:
< Button Canvas.Left =”25” Canvas.Top =”30” />
</ Canvas >
在<Button>控件中,使用了 “Canvas.附加屬性”,效果如同按鈕控件從布局控件中繼承了Left和Top兩個屬性值,這時盡管這兩個屬性仍舊屬於Canvas控件,但是屬性值已經附加到了按鈕控件上,並產生了效果。
< Button Content ="XAML依賴屬性測試" Style =" {StaticResource ButtonStyle} "
Foreground ="Yellow" Width ="240" FontSize ="14" ToolTipService.ToolTip ="附加屬性效果演示" />
</ Grid >
從以上示例可以看出,附加屬性主要目的是為了簡化代碼,增強XAML代碼對元素對象的控制。通過對已知類屬性的“繼承”或者“附加”,在元素對象上實現特有的效果。
附加屬性的應用還有許多例如動畫故事板對目標屬性的控制Storyboard.TargetProperty,Grid布局控件的行和列的控制(Row和Column)等。
XAML實例教程系列:
歡迎大家留言交流,或者加入QQ群交流學習:
22308706(一群) 超級群500人
37891947(二群) 超級群500人
100844510(三群) 高級群200人
32679922(四群) 超級群500人
23413513(五群) 高級群200人
32679955(六群) 超級群500人
88585140(八群) 超級群500人
128043302(九群 企業應用開發推薦群) 高級群200人
101364438(十群) 超級群500人
68435160(十一群 企業應用開發推薦群)超級群500人