天天看點

XAML執行個體教程系列 – 對象和屬性

XAML是一種敏感型,聲明性語言,對于字元大小寫有嚴格的限制,在項目中,以".xaml"作為檔案擴充名。XAML頁面和ASP.NET的ASPX頁面類似,都具有一個背景代碼檔案控制頁面邏輯處理,這一機制将使用者界面設計和背景代碼設計分割,這意味着項目美勞工員可以使用Expression Blend進行XAML使用者界面設計,同時背景代碼開發人員可在Visual Studio中共享該XAML檔案,并同時設計其背景代碼。

XAML學習方法和經驗

值得注意的是,微軟為開發人員和設計人員提供了友善快捷的設計方式,使用簡單的拖拽即可完成一個控件或者頁面的聲明,但是作為一名專業開發人員,需要對XAML代碼了解和掌握,否則一旦遇到複雜項目,将會出現XAML開發瓶頸。

在開始介紹XAML基礎前,首先建立一個執行個體項目,通過執行個體項目代碼幫助學習XAML語言。在Visual Studio 11中建立一個Windows 8 Metro Style空白頁面項目,項目名“XamlGuide",

預設BlankPage.xaml代碼:

XAML基礎 - Object (對象)

在XAML代碼中,一個Element(元素)通常是一個Object(對象),在代碼中映射對應.Net類。簡單了解,在XAML中聲明一個Element元素,也就是對相應公共語言運作類庫進行一次執行個體化操作。 

XAML代碼聲明一個元素對象,必須由一個開始标簽“<元素對象>”和一個結束标簽“</元素對象>”構成,基本文法如下: 

<元素對象></元素對象>

例如,在XAML中聲明一個文本框,代碼如下:

<TextBox></TextBox>

上述代碼中開始标簽“<TextBox >”是執行個體化對象名稱。結束标簽“</TextBox >”,是對應開始标簽中的元素對象名稱。

在windows 8和silverlight的XAML文法中,支援略縮式元素結束标簽,其文法格式如下:

<TextBox />

該文法格式省略</TextBox>結束标簽,使用“/”符号作為元素結束符。

值得注意的是,XAML中Elements(元素)和Attributes(特性)名稱是字元大小寫敏感型,也就是大寫和小寫字元命名具有不同的含義。在上述代碼中,如果使用<textbox>,XAML文法解析器将傳回錯誤資訊,無法對textbox元素進行執行個體化。

XAML基礎 - Property (屬性)

在面向對象程式開發中,我們所提及的屬性,即是指對象的屬性。而開發過程中,對象屬性也是最重要,最常用的概念。 在XAML代碼中,允許開發人員聲明“元素對象”,不同的“元素對象”對應着多個對象屬性。例如,一個TextBox文本框,有背景屬性,寬度屬性,高度屬性等。為了适應實際項目的需求,XAML提供三種方法設定屬性,分别是:

1. 通過Attribute特性設定對象屬性; 2. 通過Property屬性元素設定對象屬性; 3. 通過隐式資料集設定對象屬性;

下面将分别介紹這三種屬性設定方法的基礎文法和使用方法。

Attributes特性的概念

在XAML代碼中,允許在開始标簽的對象名後使用Attributes(特性)定義一個或者多個對象元素的屬性,實作屬性指派操作,其文法結構如下

<元素對象 屬性名=“屬性值” 屬性名=“屬性值” …></元素對象> 

例如,在TextBox文本框中添加預設文本内容,将文本内容指派到Text屬性即可,

<TextBox Text=“XAML執行個體教程系列”></TextBox>

由于元素對象屬性名在開始标簽内部,是以這種表達方式也被稱為“内聯屬性”。

Property屬性元素的概念

使用XAML的Attribute特性可以簡單快捷的設定對象的屬性,其屬性值局限于簡單的字元形式。在實際項目中,經常會遇到複合型控件或者自定義控件引用較為複雜的對象屬性,以達到個性化的效果。對此Attribute特性無法支援,進而引入Property屬性元素的概念。

在傳統.Net開發語言中,調用一個對象屬性,可以簡單的使用以下格式實作:

元素對象.屬性 = 屬性值

例如,在C#代碼中,調用一個按鈕的内容屬性,代碼為:

Button.Content = “XAML執行個體教程系列”;

而在XAML代碼中,其調用方法類似與.Net開發語言屬性使用方法,其文法格式為:

<元素對象>

  <元素對象.屬性>

     <屬性設定器 屬性值=“”>

  </元素對象.屬性>

</元素對象>

其中,屬性設定器可以設定為較為複雜的對象元素,例如布局控件元素,自定義控件元素等。

下面是用一個按鈕控件示範Property屬性的作用,設定按鈕内容是使用Content屬性,如果使用Attribute特性設定按鈕内容,如下代碼:

其運作結果為:

如果需要在按鈕内容中添加一個圖檔,使其具有個性化效果,将無法使用Attribute特性進行設定,這時可以嘗試使用Property屬性設定方法,例如:

在上面的示例代碼中,按鈕的Content内容屬性以<元素對象.屬性>的形式出現在<Button></Button>中,屬性值設定器被StackPanel布局控件替代,在StackPanel布局控件中,分别定義了Image控件和TextBlock控件,用來顯示圖檔和按鈕文本内容,其運作效果如下: 

從示例中可以看出,使用元素對象的Property屬性設定方法,比Attribute特性要靈活和強大。如果使用Property屬性設定簡單文本,也可以使用以下方法:

其運作效果和Attribute特性設定按鈕内容相同。Property屬性元素是使用者界面設計中最常用的屬性設定方法,在随後的章節中會經常出現。 

隐式資料集設定對象屬性

通過學習Property屬性元素,可以了解到XAML的元素對象屬性,不僅包含單一對象屬性,同時還支援複雜屬性,屬性值可以為簡單的字元資料類型,同時也可以是一個資料集。

為了簡化XAML代碼複雜性,提高代碼易讀性,XAML提供隐式資料集設定對象屬性方法。例如,在XAML中為一個ComboBox組合框指派,傳統代碼如下:

在以上代碼中,使用了<ComboBox.Items>屬性指派ComboBoxItem内容,使用隐式資料集設定對象屬性方法,可以修改以上代碼為:

從對比以上代碼可以看出<ComboBox.Items>被删除後,<ComboBox>仍舊可以對ComBoxItem進行指派操作。其運作結果和使用Property屬性元素屬性指派相同: 

另一個隐式資料集屬性指派的例子,在XAML代碼可以直接生成漸變背景效果,實作方法是使用畫刷類的GradientStops屬性控制,在下面的代碼中,我們嘗試生成一個藍色背景漸變效果: 

在以上代碼中,對<LinearGradientBrush.GradientStops>屬性指派,使用<GradientStopCollection>資料集描述漸變效果。如果使用隐式資料集屬性指派方法,則可以修改以上代碼為: 

兩段代碼運作結果相同:

隐式資料集屬性指派方法在Windows 8和Silverlight自定義控件模闆和樣式中經常用到,是常用屬性指派方法之一。

今天暫時介紹到這裡,歡迎留言讨論。

<a href="http://silverlightchina.net/uploads/soft/120521/1-120521230633.zip" target="_blank"></a>

<a href="http://silverlightchina.net/uploads/soft/120521/1-120521230633.zip" target="_blank">源代碼下載下傳</a>

歡迎大家留言交流,或者加入QQ群交流學習:

22308706(一群) 超級群500人 

37891947(二群) 超級群500人 

100844510(三群) 進階群200人 

32679922(四群) 超級群500人 

23413513(五群) 進階群200人 

32679955(六群) 超級群500人 

88585140(八群) 超級群500人 

128043302(九群 企業應用開發推薦群) 進階群200人 

101364438(十群) 超級群500人 

68435160(十一群 企業應用開發推薦群)超級群500人