整理自某下載下傳的PPT《XAML基礎教程》
1 XML與XAML
1.XML指可擴充标記語言(EXtensible Markup Language) XML 是一種标記語言,很類似HTML标記語言 XML 的設計宗旨是傳輸資料,而非顯示資料 XML 标簽沒有被預定義,需要自行定義标簽 示例:
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
2.XAML語言是ExtensibleApplication Markup Language的簡稱,中文稱為“可擴充應用程式标記語言” 控件層次結構一目了然 UI代碼與業務邏輯代碼相隔離 聲明式語言,更便于利用工具自動生成代碼 XAML标記通常使用與XML中相同的字元實體和轉義序列 主要用于Silverlight,WPF,Windows Phone和Windows 8應用開發 示例:
2 C#與XMAL
C#與XAML呈現效果方式不同:
1.C#編譯後執行
2.XAML不需要編譯,加載後解析就可呈現
3 為什麼要學習XAML
1.XAML語言應用于多個開發領域,Web應用,移動應用,桌面應用等
2.對于具有Silverlight,WPF, Windows Phone以及Windows 8開發經驗的程式員,可以将開發技能再利用,加快學習速度,提高開發效率;
3.語言性能強大,學習曲線平緩, 有強大的開發工具支援,例如,使用微軟Expression Studio或者VisualStudio開發工具,可快速便捷的建立XAML相關應用;
4.随着Windows8的釋出, XAML是Windows 8 Style應用主要開發語言之一,從Windows 8開發路線上可以看出,XAML将與C#,VB.NE,C++配合開發Windows8 Style應用。
4 XAML的作用
1.XAML用于聲明UI及UI元素的一種格式 2.XAML用于聲明樣式和模闆的格式,這些樣式和模闆應用于控件和UI的邏輯基礎 3.XAML 定義UI的可視外觀,關聯的代碼隐藏檔案定義邏輯。可以對UI設計進行調整,而不必更改代碼隐藏中的邏輯。 就此作用而言,XAML簡化了負責主要可視化設計的人員與負責應用程式邏輯和資訊設計的人員之間的工作流。 4.XAML 可在Expression Blend與Visual Studio之間互換。
5 屬性設定
屬性是對 XAML 元素特征進行描述的 方法 屬性不允許在 XAML 中重複設定多次 允許在托管代碼中改變元素的屬性值
屬性 設定 幾種方式 使用屬性文法/ 使用屬性 元素 文法/ 使用内容 元素 文法/ 使用集合 文法
5.1 屬性文法
隻有執行個體化對象才可以設定執行個體屬性 , 格式 如下 :
<objectNamepropertyName=“propertyValue”/>
或者
<objectNamepropertyName=“propertyValue”>
</objectName>
objectName是要執行個體化的對象,propertyName是需要設定的屬性名稱,propertyValue是屬性的值
每個屬性對應一個屬性值,屬性值類型必須與屬性比對 一個标記中可以設定對象的多個屬性
<Canvas Width="150" Height="150" Background="Red"/>
或者
<Canvas Width="150" Height="150" Background="Red">
</Canvas>
5.2 屬性元素文法
某些屬性可以使用屬性元素文法來設定,格式為:
<object>
<object.property>
<!—元素屬性值-->
</object.property>
</object>
Property是object元素的屬性,<object.property>…</object.property>之間包含的是對象屬性的值
<Ellipse Width="150" Height="150">
<Ellipse.Fill>
<SolidColorBrush Color="Green"/>
</Ellipse.Fill>
</Ellipse>
5.3 内容元素文法
某些元素的屬性支援内容元素文法,允許忽略元素的名稱 執行個體對象會根據 XAML 元素中的第一個标記值來設定屬性 對于 大量的格式化文本,使用内容元素文法更加靈活 屬性标記之間可以插入大量的文本内容
<TextBlock Width="200"TextWrapping="Wrap>Windows 8</TextBlock>
5.4 集合文法
元素支援一個屬性元素 的集合 ,才使用集合文法進行設定屬性 使用托管代碼的 Add 方法來增加更多的集合元素 本質是向對象的集合中添加屬性項
<Rectangle Width="200" Height="150">
<Rectangle.Fill>
<LinearGradientBrush>
<GradientStopCollection>
<GradientStop Offset="0.0" Color="Gold"/>
<GradientStop Offset="1.0" Color="Green"/>
</GradientStopCollection>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
下面代碼實際省略了省略GradientStopCollection,隐式的屬性設定方法
<Rectangle Width="200" Height="150">
<Rectangle.Fill>
<LinearGradientBrush>
<LinearGradientBrush.GradientStops>
<GradientStop Offset="0.0" Color="Gold"/>
<GradientStop Offset="1.0" Color="Green"/>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
附加屬性
附加屬性作用于支援附加屬性的元素 附加屬性是由支援附加屬性的父元素産生作用,支援附加屬性的元素會繼承所在的父元素的屬性 附加屬性的格式: AttachedPropertyProvider.PropertyName
AttachedPropertyProvider為附加屬性的提供者,PropertyName為附加屬性的名稱
<Canvas>
<Rectangle Canvas.Left="50" Canvas.Top="50" Width="200" Height="150" RadiusX="10" RadiusY="10" Fill="Gold"/>
</Canvas>
Rectangle元素設定了Canvas.Left和Canvas.Top屬性,使用Canvas進行布局時,包含在<Canvas>…</Canvas>之間的元素就會産生相對于Canvas對象的附加屬性Canvas.Left和Canvas.Top屬性
依賴屬性
英文名稱: DependencyProperties 依賴 屬性 和 CLR 屬性類似 ,提供 一個執行個體級私有字段的通路封裝,通過 GetValue 和 SetValue 通路器實作屬性的讀寫 操作 最重要一個特點是 屬性值依賴于一個或者多個資料源,提供這些資料源的方式也可以 不同 由于依賴多資料源的緣故,故稱之為依賴屬性 1. 依賴屬性最重要的一個特點是屬性值依賴于一個或者多個資料源,提供這些資料源的方式也可以不同,例如,通過資料綁定提供資料源,通過動畫,模闆資源,樣式等方式提供資料源等,在不同的方式資料源下,依賴屬性可以實時對屬性值進行改變。
<Page.Resources>
<Style x:Key="ButtonStyle" TargetType="Button">
<Setter Property="Foreground" Value="Red"/>
<Setter Property="FontSize" Value="24"/>
</Style>
</Page.Resources>
<Button Content="依賴屬性測試" Style="{StaticResource ButtonStyle}" Width="240"/>
1. 定義簡單使用者控件樣式,樣式代碼中定義了控件的内容文本顔色,字型尺寸 2. Button 應用定義好的資源樣式 ButtonStyle
<Button Content="依賴屬性測試" Style="{StaticResource ButtonStyle}" Width="240" Foreground="Yellow" FontFamily="14"/>
1. 按鈕控件中定義文本顔色,字型尺寸,同時也調用靜态資源樣式 ButtonStyle 2. 根據之前講述的,依賴屬性執行的優先級,按鈕控件的本地指派優先于控件樣式 3. 是以上述代碼中,忽略了 ButtonStyle 樣式,應用本地依賴屬性值生成不同結果
6 事件(Event)
Windows消息機制中重要概念之一,最常見的人機互動手段之一 XAML幫助應用管理使用者輸入,執行不同的行為 引入增強型事件處理系統-Routed Event(路由事件) Windows 8應用開發中,事件常常被用于控制更改通知操作
基礎文法:<ObjectNameEventName=“EventHandle”>
XAML:
<Button Click="Button_Click_1"/>
C#:
private void Button_Click_1(object sender,RoutedEventArgs e)
{
}
1. 事件在 Xaml 中基礎文法如下: < 元素對象 事件名稱 =” 事件處理” /> 2. 在實際項目開發中, VisualStudio 的 Xaml 文法解析器為開發人員提供了智能感覺功能,通過該功能可以在 Xaml 中友善的調用指定事件,而 Visual Studio 将為對應事件自動生成事件處理函數背景代碼。