索引
- XAML 標準
- XAML 屬性
- XAML 事件
1.什么是XAML
XAML是WPF語義化的一個特殊的XML文件,語法遵循XML編寫的所有特點
1. 標記必須結(jié)束
2. 開始標記和結(jié)束標記必須一致
3. 屬性值必須用雙引號
4. 整個文檔只能有一個根節(jié)點
2. 命名空間
我們先來看看默認生成的Windows中的命名空間
x:Class="WpfApp1.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:WpfApp1"
其中xmlns是命名空間的前綴,后面的:xxx是內(nèi)容調(diào)用該命名空間的內(nèi)容時需要用這個前綴調(diào)用。比如x:Name屬性。
這里"http://schemas.microsoft.com/winfx/2006/xaml/presentation" 是命名空間的名字類似System.Data.SqlClient
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"是默認命名空間,里面包含了所有wpf中默認的所有組件內(nèi)容。這個http路徑并沒有其他的用途。
3. 屬性
- C#中給某個控件屬性賦值我們再熟悉不過了,比如給一個Label控件的Text屬性賦值,只需要獲取當前要控制的控件對象并通過賦值符號給其相應(yīng)類型的數(shù)據(jù)即可。比如我們要把Grid控件的Name屬性賦值給windows窗體。
MainWindow.xaml:
<Window x:Class="WpfApp1.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:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid Name="Grid1" Loaded="Grid1_OnLoaded">
</Grid>
</Window>
MainWindow.XAML.cs:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Grid1_OnLoaded(object sender, RoutedEventArgs e)
{
Title = Grid1.Name;
}
}
功能寫起來還是蠻簡單的。
3.1普通屬性
其中,
Title="MainWindow" Height="350" Width="525"就是XAML里的簡單屬性賦值。
Title = Grid1.Name;就是我們熟悉的C#屬性賦值。
注:Loaded="Grid1_OnLoaded"是事件綁定,當Grid加載完成后觸發(fā)事件并自動調(diào)用Grid1_OnLoaded方法
3.2 節(jié)點屬性
一般情況任何屬性都可以以另外一種方式編寫就是子節(jié)點屬性的方式,比如我們把window的Title屬性變成節(jié)點屬性的方式編寫的話就成了這樣
<Window x:Class="WpfApp1.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:WpfApp1"
mc:Ignorable="d"
Height="350" Width="525">
<Window.Title>這是標題</Window.Title>
<Grid Name="Grid1" Loaded="Grid1_OnLoaded">
</Grid>
</Window>
這兩種是等同的寫法,一般使用前一種的比較普遍。不太推薦第二種寫法,會顯得比較亂。
3.3 復(fù)雜屬性
有些時候我們不得不使用子節(jié)點的方式來給某個特定控件屬性賦值。比如給Grid設(shè)置一個漸變的背景顏色。
<Grid Name="Grid1" Loaded="Grid1_OnLoaded">
<Grid.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FF595050" Offset="0"/>
<GradientStop Color="#FFDE1313" Offset="1"/>
</LinearGradientBrush>
</Grid.Background>
</Grid>
漸變顏色需要設(shè)置的數(shù)據(jù)相對較多,不能用一個簡單的數(shù)據(jù)描述,這種情況我們就必須采用子節(jié)點屬性的方式賦值。我們稱之為復(fù)雜屬性。
3.4 依賴屬性
我們來給Grid網(wǎng)格控件設(shè)置幾個單元格,這種數(shù)據(jù)也必須使用復(fù)雜屬性的方式設(shè)置
<Grid Name="Grid1" Loaded="Grid1_OnLoaded">
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FF595050" Offset="0"/>
<GradientStop Color="#FFDE1313" Offset="1"/>
</LinearGradientBrush>
</Grid.Background>
</Grid>
這樣我們就給Grid網(wǎng)格設(shè)置成了四行四列等分的表格了。設(shè)置行列的方式就是復(fù)雜屬性,如果我們需要把一個按鈕放入到第二行第三個單元格該怎么做呢?
<Grid Name="Grid1" Loaded="Grid1_OnLoaded">
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FF595050" Offset="0"/>
<GradientStop Color="#FFDE1313" Offset="1"/>
</LinearGradientBrush>
</Grid.Background>
<Button Content="Button" Grid.Column="2" Grid.Row="1" />
</Grid>
這里我們再Button節(jié)點上添加了Grid.Column和Grid.Row這就是我們采用依賴屬性的方式設(shè)置當前控件元素和父元素的關(guān)系或者相關(guān)的屬性數(shù)據(jù)。
XAML事件
Loaded="Grid1_OnLoaded"是事件綁定,當Grid加載完成后觸發(fā)事件并自動調(diào)用Grid1_OnLoaded方法