XAML是啥?
XAML是微軟創造的一種開發語言,即可拓展應用程序標記語言。扮演了HTML+CSS+JavaScript的角色。
創建一個默認的WPF程序
PS 實踐:我們通常下載Visual Studio 並直接創建解決方案/項目來開發程序,實際上我們利用IDE針對我們的要開發的代碼配置好了編譯器的參數,並准備好了一些基本的源代碼,省去我們手動配置)
默認狀態下創建,我們會在當前解決方案下看到一個項目。其中包含以下分支:
1.Properties分支:里面的主要內容要用到的資源(圖標、圖片、靜態的字符串)和配置信息
2.References分支:標記了當前的項目引用到的類庫/其它項目
3.App.xaml分支:程序的主體,在Windows系統環境下,一個程序就是一個進程(Process)。一個GUI進程需要一個窗體作為主窗體。App.xaml文件的作用就是聲明了程序的進程和主窗體會是誰。
4.Window1.xaml分支:程序的主窗體
剖析XAML代碼
一個.xaml下會有一個.xaml.cs文件我們會看到.xaml.cs文件會有對應的分部類。是不是和winform很相似。拿Window1.xaml和Window1.xaml.cs兩個文件來看。Window1.xaml.cs下有個MainWindow的分部類,按照之前WinForm的經驗Window1.xaml是不是也對應的MainWindow這個分部類呢?我們先假定它是的,我們會看到代碼里面有一行
Title="MainWindow" Height="450" Width="800"
我們在后台代碼執行這樣的操作:
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); var aa = this.Title; var bb = this.Height; var cc = this.Width; Debug.Print(aa.ToString() + "==========" + bb.ToString() + "============="+cc.ToString()); } }
得到的結果為:
MainWindow==========450=============800
這充分驗證了我們的猜想:XAML標簽聲明一個元素時對應的內存中的一個對象,最外層的標簽元素就是后台代碼的分部類。
在XAML中對象之間的層級關系,要么是並列要么是包含,全部體現在標簽的關系上。那在后台類里,我們可以通過using引用其它名稱空間,而在XAML代碼里,我們通過xmlns特征來定義名稱空間,格式如下:
xmlns:[可選的映射前綴]="名稱空間"。看下默認的XAML代碼:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:MyFirstWpfApplication" x:Class="MyFirstWpfApplication.MainWindow" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> </Grid> </Window>
可以發現我們有5行代碼以xmlns開頭,也就是“引用了5個默認的名稱空間”。
其中x:和mc:開頭表示調用上面聲明引用的名稱空間。
x:它包含的類都是與解析XAML語言相關。
x:Class="MyFirstWpfApplication.MainWindow"表示將當前這個Window這個標簽解析成C#類的類名。這也和我們開始驗證的其為后台分部類一樣。它是x:下的Attribute,只能用於根節點,且根節點的類型要與x:Class所指示的類型(且為分部類)一致。
補充 x名稱空間下的其它Attribute:
x:Name:告訴編譯器為這個標簽生成對應的實例外還要為這個實例聲明一個引用變量,變量名就是x:Name的值。還有將XAML標簽所對應的對象的Name屬性也設為x:Name的值,並注冊到UI樹上,方便查找。
x:FieldModeifer 設置元素可訪問級別
x:key 采用鍵值對等
XAML語法
xaml文檔是一個樹形結構
xaml中為對象屬性賦值的語法:首先xaml代碼不能編寫程序的運行邏輯,當我們創建標簽對象的時候對其屬性進行必要的初始化才有使用意義。為對象屬性賦值有兩種方法
1.使用字符串進行簡單賦值。即簡單的Attribute=Value語法賦值,由於xaml語法限制,Value只能是字符串的值。
2.使用屬性元素進行復雜賦值。屬性元素指的是某個標簽的一個元素對應這個標簽的一個屬性,即以元素的形式來表達一個實例的屬性。
XAML對名稱空間引用的語法
xmlns:[映射名]=“clr-namespace:類庫中名稱空間的名字;assembly=類庫文件名”