XAML是eXtensible Application Markup Language可擴展應用程序標記語言,它是微軟公司爲構建應用程序用戶界面而建立的一種新的描述性語言。XAML提供了一種便於擴展和定位的語法來定義和程序邏輯分離的用戶界面,而這種實現方式和ASP.NET中的"代碼後置"模型很是相似。XAML是一種解析性的語言,儘管它也能夠被編譯。它的優勢是簡化編程式上的用戶建立過程,應用時要添加代碼等。html
軟件開發中最典型的分工合做就是設計師(Designer)與程序員(Programmer)之間的協做。通常協做是這樣進行的:程序員
(1)需求分析結束後,程序員對照需求設計一個用戶界面(User Interface,UI)的草圖,而後把精力主要放在實現軟件的功能上。編程
(2)與此同時,設計師對照需求、考慮用戶的使用體驗(User Experience,UX)、使用專門的設計工具(好比PS)設計出優美的UI。瀏覽器
(3)最後,程序員按照設計師繪製的效果圖,使用編程語言實現軟件的UI。網絡
設計師和程序員的合做是「串行」的,若是設計師能與程序員「並行」工做而且直接參與程序開發中來,會解決不少問題。編程語言
微軟借鑑了網絡程序開發團隊的經驗,把開發模式從網絡開發移植到桌面開發和富媒體網絡程序的開發上,創造了一種新的開發語言-XAML(讀做zaml)。全稱爲Extensible Application Markup Language,便可擴展應用程序標記語言。扮演着HTML+CSS+Javascript的角色。ide
設計師使用Blend來設計UI,程序員則使用VS開發後臺邏輯代碼。函數
巨大優勢是它幫助開發團隊真正實現了UI與邏輯的剝離。工具
非空標籤:<Tag Attribute1=Value1 Attribute2=Value2>Content</Tag>動畫
空標籤:<Tag Attribute1=Value1 Attribute2=Value2/>
Property(屬性)屬於面向對象理論範疇。在使用面向對象思想編程的時候,經常須要對客觀事物進行抽象,再把抽象出來的結果封裝成類,類中用來表示事物狀態的成員就是Property。Property(屬性)是針對對象而言的。
Attribute(特性)是語言層面的東西,是給編譯器看的。Attribute只是用來影響類在程序中的用法,而Property則對應着抽象對象身上的形狀,她們根本不是一個層面上的東西。好比有兩個同類的語法元素A和B,爲了表示A與B不徹底相同或者A與B在用法上有些區別,這時候要針對A和B加一些Attribute。也就是說,Attribute只與語言層面上的東西相關,與抽象出來的對象沒什麼關係。由於Attribute表示「區分」的,因此把它譯爲「特徵」。習慣上,英文中把標籤式語言中表示一個標籤特徵的「名稱-值」對稱爲Attribute。每每是一個標籤所具備的 Attribute多於它所表明的對象的Property。
XAML是一種「聲明」式語言,當你見到一個標籤,就意味着聲明瞭一個對象,對象之間的層級關係要麼並列、要麼是包含,全都體如今標籤的關係上。
XAML使用標籤來定義UI元素(UI Element),每一個標籤對應.NET Framework類庫中的一個控件類。經過設置標籤的Atrribute,不但能夠對標籤全部對應空間對象的Property進行賦值,還能夠作一些額外的事件。
XAML使用樹形邏輯結構來描述UI。例如
<Window> <StackPanel> <TextBox/> <TextBox/> <StackPanel> <TextBox/> <TextBox/> </StackPanel> <Button> <Image/> </Button> </StackPanel> </Window>
XAML中爲對象屬性賦值共有兩種語法:
使用字符串進行簡單賦值
使用屬性元素進行復雜賦值
5.1 使用標籤的Attribute爲對象屬性賦值
這種經過Attribute=Value語法賦值時,Value只多是一個字符串值。
5.2使用TypeConverter類將XAML標籤的Attribute與對象的Property進行映射(不懂)
5.3 屬性元素
非空標籤均有本身的內容(Content)。標籤的內容指的就是夾在起始標籤和結束標籤之間的一些子級標籤,每一個子級標籤都是父級標籤內容的一個元素。
5.4標記擴展
所謂標記擴展,實際是一種特殊的Attribute=Value語法,其特殊的地方在於Value字符串是由一對花括號及其括起來的內容組成,XAML編譯器會對這樣的內容做出解析。生成相應的對象。
例如:
<TextBox Text="{Binding ElementName=slider,Path=Value,Mode=OneWay}"/>
WPF支持XAML裏爲對象的事件指定事件處理器,方法是使用事件處理器的函數名爲對應事件的Attribute進行賦值:<ClassName EventName="EventHandlerName">
代碼後置:設計師用XAML爲程序建立漂亮的「殼」(UI)並展示給客戶;程序員用C#編寫程序的「瓢」(邏輯)、從後臺支持前面的「殼」--這種將邏輯代碼與UI代碼分離、隱藏在UI代碼後面的形式就叫代碼後置(Code-Behind)。
XAML引入名稱空間的語法:xmlns:映射名=「clr-namespace:類庫中名稱空間的名字;assembly=類庫文件名」。
一旦咱們將類庫中的名稱引用XAML文檔,咱們就可使用這些名稱空間裏的類。語法格式:<映射名:類名>...</映射名:類名>
XAML的註釋繼承自XML,語法是:<!--須要被註釋掉的內容-->
更多參考:XAML中X名稱空間詳解
大凡包含XAML代碼的WPF成員都須要經過語句xmlns:x="http://schemas.microsoft.com/winfx/2006/xmal"來引入http://schemas.microsoft.com/winfx/2006/xmal這個名稱空間。
x名稱空間包含的工具
9.1 x:Class
這個Attribute的做用是告訴XAML編譯器 XAML標籤的編譯結果與後臺代碼指定的類合併。
9.2 x:ClassModifier
這個Attribute的做用是告訴XAML編譯有標籤編譯生成的類具備怎樣的訪問控制級別。
9.3 x:Name告訴XAML編譯器,當一個標籤帶有x:Name時除了爲這個標籤生成對應實例外 還要爲這個實例聲明一引用變量,變量名就是x:Name的值。將XAML標籤所對應對象的Name屬性也設爲x:Name的值,並把這個值註冊到UI樹上,以便查找。
x:Name的x加一個冒號,說明它來自x這個名稱空間。這個名稱空間是定義在XAML的根元素上的。也就是這句:
1. xmlns:x=[url]http://schemas.microsoft.com/winfx/2006/xaml[/url]
這個x就是XAML的字頭了。這個名稱空間的本意就是告訴咱們——這個名稱空間裏所裝的元素都與XAML解析有關。好比,我在代碼裏還使用了x:Code,把原本應該呆在C#代碼裏的內容請到XAML裏來了。
可見,x:Name與Name根本不是一個層面上的東西——Name是直接與元素和麪向對象編程相關的東西;x:Name是XAML語言解析層面上的東西。詳細參考
9.4 x:FieldModifierx:FieldModifier用來在XAML裏改變引用變量訪問級別的。例如:
<TextBox x:Name="textBox1" x:FieldModifier="public" Margin="5"/> 默認的訪問級別默認爲internal。x:FiledModifier使用前提是這個標籤同時也使用x:Name。
9.5 x:Key
x:Key的做用就是爲資源貼上用於檢索的索引。例如:
xmls:sys ="clr-namespae:System;assembly=mscorlib" <Window.Resources> <sys:String x:Key="myString">Hello WPF Resource!</sys:String> </Window.Resources> <Textbox Text="{StaticResourc ResourceKey=myString}"/>如下四個標籤擴展 9.6 x:Type
x:Type的值應該是一個數據類的名稱。
9.7 x:Nullxaml中的空值
9.8 x:Array
經過它的Items屬性向使用者暴露一個類型已知的ArralyList實例,ArrayList內成員的類型又x:Array的Type指明。
9.9 x:Static
xaml中使用數據類型的static成員。
更多:查看MSDN