這兩天不留神把右手中指給傷了,打字工作幹啥都不方便,有點小鬱悶,整理資料也受到了一些影響。不發牢騷了。

 

在windows Phone開發中,他使用的是silverlight框架,他的應用介面都是由xaml構成,他就相當於Android中的xml檔案。在微軟的設計理念中,Code-Behind(UI與業務邏輯的分離)經典模式在這裡的體現就是xaml與xaml.cs的檔案的組合。那麼在使用xaml開發的時候,我們首先得知道這玩意兒是啥,這玩意兒怎麼用,這玩意兒有啥注意的地方。

 

3.1什麼是xaml

 

Xaml是一種宣告性標記語言,他類似於HTML和xml的結合體。這也是silverlight獨有的語法結構。Xaml大體上呢也遵循xml語法規則,例如標籤的成對出現,每一個元素都包含有一個名稱或者多個屬性。在xaml中,每個屬性都和silverlight類庫中定義的屬性對應,每個元素都和silverlight中的類的名稱所對應。比如說<.Button/>元素就對應System.Windows.Controls,Button.

因為xaml是一種純粹的標記語言,這就意味著某個元素要處理一個事件時,需要觸發該元素的特定屬性來處理。他就類似於asp.net採用的程式碼後置,將顯示的UI和業務邏輯相分離。

在開發xaml中,最好使用name屬性來區分和定位一個元素,這樣我們在業務邏輯中就可以通過這個屬性名來訪問該元素。

 

 3.2宣告一個xaml元素的四大原則

 

1.xaml是嚴格區分大小寫的,元素和屬性的名稱必須嚴格遵守;

2.所有屬性值,無論什麼資料型別,都應該包含在雙引號當中;

3.所有的元素必須是封閉的,也就是說一個元素必須有開始有結束。例如<Button …/>要麼自我結束,要麼成對出現<Button …></Button>

4.最終的xaml必須是合格的xml文件。

 

3.3 xaml的作用

 

1.xaml是用於宣告silverlight UI以及UI中元素的主要格式,通常專案中至少有一個xaml檔案表示應用程式中用於最初顯示的UI介面。其他xaml檔案可能是宣告資源或者是其他地方用到的UI介面。

2.Xaml是用於宣告支援UI介面顯示不同特效的樣式和模板的格式,這些樣式和模板用於silverlight 控制元件和UI的邏輯基礎。

3.Xaml的出現可以使用在不同的UI設計器上,可以使用不同的設計器結合使用,達到最完美的效果

4.Xaml的出現簡化了開發的流程,使做業務邏輯的兄弟和做UI設計的朋友基本上是互不干涉。

5.Xaml的出現可以保留更多的設計原型,方便這個視覺化設計中出現的版本控制。

Xaml的常規作用是用於宣告物件,這些物件的屬性和物件—-屬性的關係。宣告的物件由類型別的庫提供支援,相關的庫可以是以下任意一個:

1.silverlight核心庫;

2.分散式庫,他們是在包中再發布的SDK的一部分,或者也有可能是應用程式庫的快取選項;

3.第三方控制元件的自定義庫;

4.使用者自己建立的類庫;

5.其他庫。通過應用程式模型進行引用的庫。

 

3.4xaml的語法

 

3.4.1 xaml的名稱空間

 

名稱空間:他的作用是確定如何解釋引用程式設計實體的字串標記,如果重複使用字串標記,名稱空間還可以解決多義性。他的存在使得程式設計框架能夠區分使用者宣告的標記和框架宣告的框架宣告的標記,並通過名稱空間來消除可能出現的標記衝突。其實簡單理解就是兩點,第一點,宣告引用。第二點區分標記所屬的空間。

在這裡xaml使用標記中提供的xml樣式名稱空間宣告(xmlns),並將名稱空間格式表示的型別屬性資訊和程式集資訊都都與特定的xaml名稱空間關聯。這也使得建立應用程式時,如果要讀取xaml檔案,就可以區分出標記以及標記的所屬。

xaml檔案始終在其根元素中宣告一個預設的名稱空間,如果有屬於該預設空間的控制元件元素,就不必再進行字首限定。

Xaml名稱空間用於宣告他們的特定元素,也就是在該UI上顯示的那些控制元件,

一個預設的xaml名稱空間宣告提供了3項資訊:

1.一個字首,該字首代表了所屬的空間。如果限定到某一個元素上,證明該元素屬於那片空間

2.在xaml名稱空間中定義元素的後備型別的程式集,xaml處理器必須訪問此程式集才能基於xaml宣告建立物件,簡單理解就是說xaml處理器如果要宣告建立元素,就必須先訪問其所屬的那片空間。

3.該程式集中的一個CLR名稱空間。CLR是公共語言執行時,Common Language Runtime)和Java虛擬機器一樣也是一個執行時環境,它負責資源管理(記憶體分配和垃圾收集),並保證應用和底層作業系統之間必要的分離。

在幾乎每個xaml檔案中宣告一個特定的名稱空間是針對元素的名稱空間。太蛋疼了,這手裡都各式各樣的資料,每一份都不一樣。總結的都好鬱悶了。

常見的名稱空間的構造“x:字首”:

x:Key  為ResourceDictionary中的每個資源設定唯一ID

x:Class 為xaml提供程式碼隱藏的類的clr名稱空間和類名稱。並命名由標記便宜在應用程式模型中建立的類。

x:Name 處理xaml中定義的物件元素,為該元素指定唯一名稱。

 

3.4.2 宣告物件

 

一個xaml檔案始終只有一個元素作為其根,該元素宣告的一個物件將作為某些程式設計結構的概念跟。或者是應用程式的整個執行時定義的物件圖。根據xaml語法,可以通過3鍾方法在xaml中宣告變數:

1.直接使用物件元素語法:使用開始結束標記將物件例項化為xml格式的元素,可以使用該語法宣告根物件或者建立用於設定屬性值得巢狀物件。

2.間接性使用屬性語法:使用內聯關鍵字串宣告物件。

3.可以用標記擴充套件

 

    除了以等同於例項化物件的方式宣告物件之外,XAML 中還提供了一些可用來引用現有物件的方法.這些物件可能在 XAML 的其他區域中定義,或者通過平臺及其應用程式或程式設計模型的某種行為隱式存在。 

 

3.4.2.1 使用物件元素語法宣告物件



     若要使用物件元素語法宣告物件,需要使用以下模式編寫標記,其中,objectName 是要例項化的型別的名稱。  在本文件中,經常出現術語“物件元素用法”,這是用於用物件元素語法建立物件的特定標記的簡稱。 

    <objectName

   </objectName

下面的示例是用於宣告 Canvas 物件的物件元素用法。 

   <Canvas>

  </Canvas>

許多 Silverlight 物件(例如 Canvas)可以包含其他物件。

<Canvas>

  <Rectangle>

  </Rectangle>

</Canvas>



       為方便起見(且作為 XAML 與 XML 的一般關係的一部分),如果物件不包含其他物件,則可以使用一個自結束標記(而不是開始/結束標記對)來宣告物件元素,如下面示例中的 <Rectangle /> 標記所示。

<Canvas>

  <Rectangle />

</Canvas>

 

3.4.2.2 使用屬性語法宣告物件

 

    在某些情況下,屬性 (Property) 值並不只是語言基元(如字串),此時可以使用屬性 (Attribute) 語法來例項化設定該屬性 (Property) 的物件,並初始化用於定義新物件的鍵屬性 (Property)。 

    有時可以宣告物件以及所包含的用於為構造提供初始值的內部文字。  在 XAML 中,這種方法和語法稱為初始化文字。  從概念上來說,初始化文字類似於呼叫具有引數的建構函式,但內部的 XAML 分析器實現通常不按原意來完成。 

初始化文字在 Silverlight 中很有用,用來設定某些結構的初始值。  如果在資源字典中建立結構示例,則可以使用此方法,因為您打算將該結構值共享給多個目標屬性。  在某些結構中,您無法使用屬性語法來設定結構的值。這個就相當於啥呢,個人理解就相當於他的text屬性的預設值.