WPF自學(xué)系列 1XAML基礎(chǔ)

索引

  • 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. 屬性

  1. 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.ColumnGrid.Row這就是我們采用依賴屬性的方式設(shè)置當前控件元素和父元素的關(guān)系或者相關(guān)的屬性數(shù)據(jù)。

XAML事件

Loaded="Grid1_OnLoaded"是事件綁定,當Grid加載完成后觸發(fā)事件并自動調(diào)用Grid1_OnLoaded方法

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ??JavaScript 與 HTML 之間的交互是通過事件實現(xiàn)的。 ??事件,就是文檔或瀏覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,686評論 1 11
  • 面試題參考1 : 面試題[http://www.cocoachina.com/ios/20150803/12872...
    江河_ios閱讀 1,814評論 0 4
  • 錢穆高中沒讀完,以沒大學(xué)經(jīng)歷為憾,然北大教授八年,講中國通史,操無錫官話,每堂兩小時,三百座教室站無虛位,甚者連聽...
    晚霞消失之時閱讀 392評論 0 1
  • 上個周六日,跟隨我們校小二團隊一起出團去天津,收獲很多。 1.一個團隊的老大必須有獨特的領(lǐng)導(dǎo)力,能夠用最簡單的方法...
    孤狼龍浩閱讀 274評論 0 0
  • Supersuper莉莉李閱讀 306評論 1 2

友情鏈接更多精彩內(nèi)容