1.什么是XAML
軟件開發中最典型的分工合作就是設計師(Designer)與程序員(Programmer)之間的協作。一般協作是這樣進行的:
(1)需求分析結束后,程序員對照需求設計一個用戶界面(User Interface,UI)的草圖,然后把精力主要放在實現軟件的功能上。
(2)與此同時,設計師對照需求、考慮用戶的使用體驗(User Experience,UX)、使用專門的設計工具(比如PS)設計出優美而是用的UI。
(3)最后,程序員按照設計師繪制的效果圖,使用編程語言實現軟件的UI。
設計師和程序員的合作是“串行”的,如果設計師能與程序員“並行”工作並且直接參與程序開發中來,會解決很多問題。
微軟借鑒了網絡程序開發團隊的經驗,把開發模式從網絡開發移植到桌面開發和富媒體網絡程序的開發上,創造了一種新的開發語言-XAML(讀作zaml)。全稱為Extensible Application Markup Language,即可擴展應用程序標記語言。扮演者HTML+CSS+Javascript的角色。
設計師使用Blend來設計UI,程序員則使用VS開發后台邏輯代碼。
2.XAML的優點
巨大優點是它幫助開發團隊真正實現了UI與邏輯的剝離。
3.XAML入門
非空標簽:<Tag Attribute1=Value1 Attribute2=Value2>Content</Tag>
空標簽:<Tag Attribute1=Value1 Attribute2=Value2/>
Property 屬於面向對象理論范疇。在使用面向對象思想編程的時候,常常需要對客觀事物進行抽象,再把抽象出來的結果封裝成類,類中用來表示事物狀態的成員就是Property。
Attribute是編程語言文法層面的東西。Attribute只是用來影響類在程序中的用法,而Property則對應着抽象對象身上的性狀,她們根本不是一個層面上的東西。
XAML是一種“聲明”式語言,當你見到一個標簽,就意味着聲明了一個對象,對象之間的層級關系要么並列、要么是包含,全都體現在標簽的關系上。
XAML使用標簽來定義UI元素(UI Element),每個標簽對應.NET Framework類庫中的一個控件類。通過設置標簽的Atrribute,不但可以對標簽所有對應空間對象的Property進行賦值,還可以做一些額外的事件。
4.XAML 文檔的樹形結構
XAML使用樹形邏輯結構來描述UI。例如
<Window> <StackPanel> <TextBox/> <TextBox/> <StackPanel> <TextBox/> <TextBox/> </StackPanel> <Button> <Image/> </Button> </StackPanel> </Window>
5.XAML中為對象屬性賦值的語法
XAML中為對象屬性賦值公有兩種語法:
使用字符串進行簡單賦值
使用屬性元素進行復雜賦值
5.1 使用標簽的Attribute為對象屬性賦值
這種通過Attribute=Value語法賦值時,Value只可能是一個字符串值。
5.2使用TypeConverter類將XAML標簽的Attribute與對象的Property進行映射(不懂)
5.3 屬性元素
非空標簽均有自己的內容(Content)。標簽的內容指的就是夾在起始標簽和結束標簽之間的一些子級標簽,每個子級標簽都是父級標簽內容的一個元素。例如:
<ClassName> <ClassName.PropertyName> <!--對象形式為屬性賦值--> </ClassName.PropertyName> </ClassName>
注意:能使用Attribute=Value形式賦值的就不用屬性元素
5.4標記擴展
所謂標記擴展,實際是一種特殊的Attribute=Value語法,其特殊的地方在於Value字符串是由一對花括號及其括起來的內容組成,XAML編譯器會對這樣的內容作出解析。生成相應的對象。
例如:
<TextBox Text="{Binding ElementName=slider,Path=Value,Mode=OneWay}"/>
6.事件處理器與代碼后置
WPF支持XAML里為對象的事件指定事件處理器,方法時使用事件處理器的函數名為對應事件的Attribute進行賦值:<ClassName EventName="EventHandlerName">
代碼后置:設計師用XAML為程序創建漂亮的“殼”(UI)並展現給客戶;程序員用C#編寫程序的“瓢”(邏輯)、從后台支持前面的“殼”--這種將邏輯代碼與UI代碼分離、隱藏在UI代碼后面的形式就叫代碼后置(Code-Behind)。
7.導入程序集和引用其中的名稱空間
XAML引入名稱空間的語法:xmlns:映射名=“clr-namespace:類庫中名稱空間的名字;assembly=類庫文件名”。一旦我們將類庫中的名稱引用XAML文檔,我們就可以使用這些名稱空間里的類。語法格式:<映射名:類名>...</映射名:類名>
8.XAML的注釋
XAML的注釋繼承自XML,語法是:<!--需要被注釋掉的內容-->
9.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樹上,以便查找。
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}"/>
x:Type的值應該是一個數據類的名稱。
9.7 x:Nullxaml中的空值
9.8 x:Array
通過它的Items屬性向使用者暴露一個類型已知的ArralyList實例,ArrayList內成員的類型又x:Array的Type指明。
9.9 x:Static
xaml中使用數據類型的static成員。