通過老師上課的解釋和我下課后的網上查詢,我了解到了一些關於這三者的關系。XAML是.NET體系開發程序或者網頁時前台編程的一種布局方式或者說開發語言,可以比較自由的用標簽的方式進行布局,借鑒了HTML和XML等語言的風格,並且加入了一些動畫等的實現。 C#則是后台邏輯開發用的編程語言,這個應該不用多說。 WPF則是微軟准備代替C#.NET中Forms編程方式的一種全新編程方式,其方式就是前台采用XAML控制布局,后台可以用C#,VB,C++等來相應,相當於前面用XAML寫了個控件,而其控制邏輯指引到后台的函數邏輯中,而C#就是編寫邏輯的支持語言之一。
XAML是由XML派生出來的語言,所以有很多在XML中的概念在XAML中是通用的。比如使用標簽聲明一個元素(每一個元素對應內存中的一個對象)時,需要使用其實標簽<tab>和結束標簽</tag>,夾在起始標簽和終止標簽中的XAML代碼表示隸屬於這個標簽的內容。如果沒有什么類容隸屬於這個標簽,可以寫為<tag/>。
下面是最簡單的XMAL代碼:
為了表示同類標簽中的某個標簽的與眾不同,可以給它的特征(Attribute)賦值。為特征賦值的語法如下:
- 非空標簽:<tag Attribute1=value1 Attribute2=value2>content</tag>
- 空標簽<tag Attribute1=value1 Attribute2=value2/>
在這里有必要把Attribute和Property仔細地辨別一下。
這個詞的混淆由來已久,混淆的主要原因是大多數的中文譯文里即把Attribute譯為“屬性”,也把Property譯為“屬性”,其實,這兩個詞表示的不是同一個層面上的東西。
Property屬於面向對象的范疇。在使用面向對象編程的時候,常常需要對客觀事物進行抽象,在把抽象出來的結果封裝成類,類中用來表示事物狀態的成員就是Property。比如要編寫一個模擬賽車的游戲,那么必不可少的就是要對現實的賽車進行抽象,現實中汽車會帶很多數據,但是游戲中可能只關心它的長度,寬度,高度,重量,速度等有限的幾個數據,同時,還會把汽車的加速,減速等行為提取出來用算法進行模擬,這個過程就是屬於抽象(結果是Car這個類)。顯然,Car.Length,Car.Height,Car.Weight等表達的是當前汽車所處的一個狀態,而Car.Accelerate()、Car.Break()表達的是汽車能做什么。因此,Car.Length,Car.Height就是Property的典型屬性,是針對對象而言的。將Property譯為“屬性”也很貼切,總之一句話:Property屬性是針對對象而言的。
Attribute則是編程語言文法層面的東西。比如有兩個同類語法的元素A和B,為了表示A與B不完全相同或者A與B的用法上有些區別,這時候就要針對A和B加一些Attribute。也就是說Attribute只與語言層面上的東西有關,與抽象出來的對象沒有什么關系。因為Attribute是為了表示“區分”的。所以它譯為“特征”。C#中的Attribute就是這種應用的典型例子,我們可以為一個類添加Attribute,這個類里面有很多Property(屬性)。顯然,Attribute只用來影響類中程序中的用法,而Property則對應着抽象對象身上的性狀,根本不是一個層面上的東西。
習慣上,英語中把標簽式語言種表示一個標簽特征的“名----值”對稱做Attribute。如果恰好有在使用一種標簽式語言做面向對象編程,這兩個概念就有可能混在一起了。實際上,使用能夠使用面向對象編程的標簽式語言只是把標簽和對象做了一個映射-----針對標簽還是叫做Attribute,針對對象還是叫做Property,仍然不是一個層面上的東西。而且,標簽的Attribute不是和對象的Property一一映射的,往往一個標簽對於的Atrribute大於他所映射對象的Property。
因為XAML是用來在UI上繪制控件的,而控件本身就是面向對象的抽象產物,所以XAML標簽中的Atrribute有一大部分和它對應他的對象的Property是一一對應的。當然,這還意味着標簽中的Atrribute並不對應它所代表對象的Property。
明白了XAML的格式以及Atrribute和Property之間對應的關系,對上面的代碼可謂是一目了然。它的總體結構是一個Window標簽內包含一個Grid標簽(或者說Grid標簽是Window標簽的內容),所代表的內容是一個Window對象里面包含一個Grid對象。

以上就是我對XMAL的一些學習,學到的地方都還比較片面,還需努力,需要大神們多多指導。