1. 程式人生 > >wpf之二:xaml詳解

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中建立陣列,還是舉個例子。