XAML的全稱是Extensible Application Markup Language,就是咱們所說的可擴展應用程序標記語言。XAML能夠應用到許多不一樣領域,但主要用於構建用戶界面。編程
XAML是一種單純的聲明型語言,也就是說,它只能用於聲明一些UI元素、繪製UI和動畫等;不能在其中加入程序邏輯,從根本上實現了UI和邏輯代碼分離。瀏覽器
XAML是一種由XML派生而來的語言,因此不少XML種的概念在XAML是通用的。編程語言
咱們經過Visual Studio建立一個WPF應用程序,來介紹一下XAML的命名空間以及一些基本要素:(至於怎麼經過Visual Studio建立WPF Application這裏就不作介紹了)動畫
下面咱們來剖析一段最簡單的XAML代碼:編碼
<Window x:Class="WPFDemo.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Width="400" Height="350"> <Grid Name="Grid1"> <Grid Name="Grid2"/><!--空標籤--> </Grid> </Window>
這段XAML代碼包含3個元素:一個頂層的Window元素,2個Grid元素。在XAML文檔中,全部元素都映射爲一個.NET類的對象。spa
Name 被稱爲「Attribute」,一般在類中有一個Name的 「Property」與之對應。Attribute是屬於編程語言文法層面的東西;Property屬於面向對象的範疇。因此這2個Name的不一樣叫法必定不要混淆了。code
跟XML語法同樣,能夠相互嵌套元素。這段代碼中就是一個Window元素嵌套了一個Grid元素Grid1(或者說Grid元素是Window元素的內容),而後Grid1又嵌套了一個Grid元素。在XAML中只能有一個頂級元素。儘管可使用任何頂級元素,可是WPF應用程序中只能使用以下3種頂級元素:xml
· Window元素對象
· Page元素(用於可導航的應用程序)blog
· Application元素(定義應用程序資源和啓動設置)
接下來看一下他的命名空間:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
這跟咱們平時.NET中使用的命名空間不同。而是看上去像一個網頁地址名稱,可是把他們copy到瀏覽器地址欄裏也不會打開網頁。這裏是由於XML命名空間一般用URI。而且不一樣組織就不會使用相同的命名空間建立不一樣的基於XML的語言。這裏schemas.microsoft.com就能夠看出,由Microsoft全部。還有就是這個URI是XAML解析器的一個硬性編碼,只要看到這些固定的字符串,就會把一系列的Assembly和其中的.NET命名空間引用進來。
第一個命名空間是WPF的核心名稱空間,它包含了全部的WPF類,繪製UI相關,是表示(Presentation)層上面的東西。能夠看到它並不包含前綴,因此除非特別指明,全部元素都位於該命名空間下。
第二個帶有x前綴的命名空間,對應XAML語言解析處理相關的程序集,是語言層面 上的東西。後面有章節專門講解x命名空間。
最後還剩下一個x:Class="WPFDemo.MainWindow" 沒有介紹了,接下來咱們來看看這個Attribute是什麼:
x前綴說明,來自於x映射的命名空間。
namespace WPFDemo { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { /// <summary> /// /// </summary> public MainWindow() { InitializeComponent(); } } }
這個文件只包含一個簡單的InitializeComponent()方法,而這個方法是在源代碼中不可見的,由於他是編譯自動生成的。咱們能夠在項目的obj\Debug\文件夾下找到一個名字與之對應的MainWindow.g.cs 文件,咱們打開看就能夠發現該方法的實現。
下面讓咱們來作個實驗,來解釋一下x:Class這個Attribute與他對應的MainWindow.cs文件的關係:
1.首先刪除掉x:Class="WPFDemo.MainWindow"這個Attribute
2.同時也註釋掉InitializeComponent(),保證項目能正常編譯經過
3.直接F5發現項目仍是能正常運行。這是由於App.xaml中StartupUri這個Attribute指定了這個MainWindow.xaml文件。只使用XAML文件一樣能被編譯器解析。後面的章節咱們會講到。
4.而後只恢復x:Class="WPFDemo.MainWindow"這個Attribute,而後把他改成x:Class="WPFDemo.MainWindow1",編譯以後,項目仍是能正常運行。
而後咱們調用ildasm命令查看該項目生成的程序集:
會發現有個WPFDemo.MainWindow1的類,正好和咱們剛纔x:Class="WPFDemo.MainWindow1"的Attribute設置的值一致。由此,咱們能夠看出,x:Class這個Attribute的做用就是當XAML解析器將該特性解析成C#後的類名。
經過一個簡單的WPF應用程序咱們總體上了解了下XAML,接下來的章節咱們將系統的瞭解一下XAML的語法,固然還包括講解x命名空間,還有就是加載和編譯XAML。