wpf之二:xaml詳解
首先我們還是新建一個空專案,看一下VS給我們預設生成的xaml結構。
<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" Height="350" Width="525"> <Grid> </Grid> </Window>
一:xaml簡述
1:x:Class
2:xmlns
匯入名稱空間用的
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"其實也就匯入瞭如下4個wpf開發必備的dll,這個名稱空間也是xaml中預設的名稱空間。
3:xmlns:x
如果我們需要匯入一些自定義的名稱空間,那麼我們就需要加上用“:
+ 自定義名稱”的形式,這裡微軟匯入了一個自定義的名稱空間。
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"下面我們也來匯入一個名稱空間,實際開發中我們當然我們不會做成url的形式,這裡我就取名為sys字首
<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System.IO;assembly=mscorlib" Title="MainWindow" Height="350" Width="525"> <Grid> </Grid> </Window>
二:xaml中擴充套件標記
擴充套件標記分為兩種:wpf級別和xaml級別。
<1>
wpf級別擴充套件標記
①: StaticResource
用於獲取資源的值,值獲取在xaml編譯的時候完成,什麼意思呢?先舉個例子。
首先,我們發現有一個window.Resources,這東西我們可以認為是在MainWindow類中定義的全域性變數,這裡我就定義個name=“一線碼農”的
變數,那麼textblock獲取變數的方式就可以通過StaticResource。
②:DynamicResource
跟StaticResource唯一不同的是,它是在執行時獲取的,如果大家知道C#裡面的dynamic關鍵字,我想就不用解釋了,上程式碼。
③:Binding
還是在webform中找一下關鍵字吧,相當於webform中的Eval,上程式碼說話。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox Height="23" Margin="87,75,0,0" Name="textBox1" Width="120" />
<TextBox Height="23" Margin="87,126,0,0" Name="textBox2" Width="120"
Text="{Binding ElementName=textBox1, Path=Text}" />
</Grid>
</Window>
這裡我把textbox2的text繫結到了textbox1的text上,最後的效果就是我在textbox1上輸入,textbox2也會相應的變化,很有意思。④:TemplateBinding
這個被稱為模板繫結,可以把物件的屬性和模板的屬性繫結起來,詳細的介紹放在後續文章中。
<2>xaml級別擴充套件標記
① x:Type
將模板或者樣式指定在哪一種物件上時需要用type指定。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Background" Value="Red"/>
</Style>
</Window.Resources>
<Grid>
<TextBox Height="23"
Margin="87,75,0,0" Name="textBox1" Width="120" />
</Grid>
</Window>
如這裡我定義的css樣式,將background=red指定到textbox控制元件上。②:x:Static
主要用於在xaml中獲取某個物件的靜態值,上程式碼說話。
namespace WpfApplication1
{
/// <summary>
/// MainWindow.xaml 的互動邏輯
/// </summary>
public partial class MainWindow : Window
{
public static string name = "一線碼農";
public MainWindow()
{
InitializeComponent();
}
}
}
xaml程式碼:<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox Height="23" Text="{x:Static local:MainWindow.name}"
Margin="87,75,0,0" Name="textBox1" Width="120" />
</Grid>
</Window>
最後效果:③:x:null
這個就比較簡單了,xaml中某某控制元件設為null就靠它了。
1 <Grid> 2 <TextBox Height="23" Text="{x:Null}" 3 Margin="87,75,0,0" Name="textBox1" Width="120" /> 4 </Grid>
④:x:Array
這個主要就是在xaml中建立陣列,還是舉個例子。