XAML是什麼express
XAML是一種與.NET CLR緊密集成的聲明性UI標記語言。XAML中的對象元素對應到CLR中的類型或結構。XAML命名空間對應到CLR中類的命名空間,元素類型則對應到CLR中的類型。XAML是xml的子集,所以嚴格遵循XML的語法規範。spa
新建一個WPF空項目,下面是默認生成的XAML結構.net
<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow"> <Grid> </Grid> </Window>
XAML代碼組成:orm
一、 一個根元素<Window>和</window>標記。在XAML中,必須有且只能有一個根元素。xml
二、 緊接着根元素的XML命名空間的聲明。在每一個XAML文件中必需要具備兩個命名空間。對象
xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation 表示WPF命名空間,也就是XAML元素對應到CLR類的命名空間。blog
xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml 表示XAML文件自己的命名空間,語法是xmlns:x,這個是x是命名的前綴能夠是任意的字符。若是咱們須要導入一些自定義的命名空間,那麼咱們就須要加上「:+自定義的形式」,這裏微軟導入了一個自定義的命名空間。繼承
使用其它命名空間的類型語法:事件
xmlns:Prefix="clr-namespace:Namespace;assembly=AssemblyName"文檔
Prefix:用戶指定但願在XAML文檔中使用的命名空間的前綴,相似於XAML命名空間使用的x:前綴,能夠指定任意的字符串。
Namespace:是完整的.net命名空間名
AssemblyName:程序集名稱,不用指定.DLL擴展名。這個程序集必須被當前的WPF項目所引用。
三、下面是<Grid>標記,表明XAML文件的UI內容。
代碼後置文件
使用項目模板建立一個窗體或頁面時,VS會自動生成一個相應XAML文件擴展名在再加上.cs的代碼後置文件。XMLA中經過使用x:class 語法關聯到一個特定的後置類。
X:Class後置類指定爲WpfApplication1.MainWindow,能夠打開後置代碼文件,看到一個名爲WpfApplication1的命名空間,有一個MainWindow的類。X:class告訴XAML解析器,使用指定的名稱來產生一個新的類,這個類派生自XAML跟元素類。所以在代碼後置文件中能夠看到MainWindow類繼承自Window類。代碼以下:
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
特定的字符和空白
XAML嚴格遵循XML語法規範,在XML中,對特定的字符,好比& < > 等須要進行特殊處理,因此在XAML中也須要使用特定的代碼來替換這些字符。
小於符號<:< <Button Content="小於號:<"></Button>
大於符號>:&gl <Button Content="大於號:>"></Button>
And符合&:& <Button Content="And符號:&"></Button>
引號」」:" <Button Content="引號:""></Button>
在XAML中使用事件
XAML代碼中事件的聲明一般使用事件名=」事件處理方法名」,而且在後置代碼中對指定的方法提供聲明和實現。
XAML代碼
<Window x:Class="WPFDemo.MainWindow"
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:WPFDemo"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<StackPanel >
<!---定義按鈕樣式-->
<StackPanel.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Height" Value="50"></Setter>
<Setter Property="Width" Value="200"></Setter>
<Setter Property="HorizontalAlignment" Value="Left"></Setter>
</Style>
</StackPanel.Resources>
<Button Content="點擊我試試" Name="button1" Click="button1_Click"></Button>
</StackPanel>
</Window>
後置代碼:
private void button1_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("我是單擊事件");
}