
在
前一篇已經介紹XAML概念:“XAML語言是Extensible Application Markup Language的簡稱,英文發音是“zammel”,中文稱為“可擴展應用程序標記語言”,該語言是基於Extensive Markup Language(XML)可擴展標記語言,主要用於Silverlight,WPF,Windows Phone以及Windows 8應用開發,並且用於描述.Net層次型結構對象。” 換句話說,XAML不僅可被用於多種平台應用UI設計,而且可以使用層次型結構描述一個對象,這樣使UI開發更加規范,設計工具的統一,使得開發人員和設計人員之間無縫結合,項目開發流程更佳規范和順暢。
XAML是一種敏感型,聲明性語言,對於字符大小寫有嚴格的約束,在項目中,以".xaml"作為文件擴展名。XAML頁面和ASP.NET的ASPX頁面類似,都具有一個后台代碼文件控制頁面邏輯處理,這一機制將用戶界面設計和后台代碼設計分割,這意味着項目美工人員可以使用Expression Blend進行XAML用戶界面設計,同時后台代碼開發人員可在Visual Studio中共享該XAML文件,並同時設計其后台代碼。
XAML學習方法和經驗
根據微軟
Open Specification Promise(OPS) program文檔介紹,XAML文檔是一個XML文檔,在一定程度上XAML繼承了大量的XML概念,而最重要的兩個概念分別是Element(元素)的定義和Property(屬性)的使用。 所以,如果你熟悉XML,其實已經具備XAML語法基礎, 如果你具有XML開發經驗,學習XAML將會事半功倍。 理解和掌握XAML語言最簡單的方法是使用具有XAML視圖工具和XAML代碼相互比較學習,這樣會更形象化理解XAML的使用。例如使用Visual Studio或Expression Blend等。使用設計工具,可以同時顯示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提供三種方法設置屬性,分別是:
下面將分別介紹這三種屬性設置方法的基礎語法和使用方法。
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自定義控件模板和樣式中經常用到,是常用屬性賦值方法之一。
今天暫時介紹到這里,歡迎留言討論。
歡迎大家留言交流,或者加入QQ群交流學習:
22308706(一群) 超級群500人
37891947(二群) 超級群500人
100844510(三群) 高級群200人
32679922(四群) 超級群500人
23413513(五群) 高級群200人
32679955(六群) 超級群500人
88585140(八群) 超級群500人
128043302(九群 企業應用開發推薦群) 高級群200人
101364438(十群) 超級群500人
68435160(十一群 企業應用開發推薦群)超級群500人