1. 程式人生 > >WPF自學入門(一)WPF-XAML基本知識

WPF自學入門(一)WPF-XAML基本知識

yml 定位 def 負責 pen namespace for 這就是 page

一、基本概念

1、XAML是派生自XML的可擴展應用程序標記語言(Extensible Application Markup Language)由微軟創造應用在WPF,Silverlight等開發技術中。

2、在WPF中,XAML用來開發用戶界面。相對XML在語法上有一定的創新,同時繼承了XML的Tag,Attribute等語法。

3、在WPF中,XAML運行在CLR之上,但它不編譯為IL,而是編譯為BAML代碼,在運行時會被解析成CLR類型(Types)。

4、WPF中XAML是大小寫敏感的。

二、基本語法

要學習wpf,我們需要采用webform的思維來考慮問題。在WPF之中,XAML是很重要的一個元素,它是用來構造WPF的UI界面的,正是因為WPF有了XAML這標記語言,它才能實現把界面和邏輯分離開來的一種設計模式,邏輯程序員寫後臺代碼,而前臺的界面設計由設計人員用XAML來負責,這樣,就很好的進行了分工,這就是WPF吸引人的地方之一。

開始WPF的Hello World基本語法解析。

新建WPF項目

技術分享圖片

項目默認文件結構,引用中導入了如下4個wpf開發必備的dll,這也是xaml中默認的命名空間。

技術分享圖片

註意:在目錄結構中我們沒有看到program的主入口類,WPF中是通過APP文件是程序的入口,後續我會用專門一篇文章來寫啟動主界面的不同方式。我們看一下編譯後的結構

技術分享圖片

技術分享圖片

1、標簽語法=對象元素(Object Elements)

每個標簽即是一個對象元素,將被解析為一個WPF Framework(主要來自PresentationFramework.dll)中的類的實例。下面的代碼就是一個對象元素,運行時會被解析為一個Button對象實例。

技術分享圖片

運行效果

技術分享圖片

2、Attribute賦值語法

2.1 普通字符串賦值。下面代碼給Button的Property和Event賦值。字符串將被通過包裝好的TypeConverter來轉換成對象。TypeConverter使用C#的Attribute技術來實現的。

<Button x:Name="btnClick" Content="點我" HorizontalAlignment="Left" Margin="212,136,0,0" VerticalAlignment="Top" Width="75" Click="btnClick_Click"/>

2.2 標記擴展賦值。用花括號這種方式賦值就叫標記擴展賦值。常用的地方是在用到綁定和資源的時候。

<Button x:Name="btnClick" Content="點我" Command="{Binding Click}" HorizontalAlignment="Left" Margin="212,136,0,0" VerticalAlignment="Top" Width="75" />

2.3 屬性元素賦值。有的時候簡單字符串賦值不了的,就用屬性元素賦值。

<Button x:Name="btnClick1" HorizontalAlignment="Left" Margin="212,160,0,0" VerticalAlignment="Top" Width="75" Click="btnClick_Click">

<Button.Content>

點我

</Button.Content>

</Button>

2.4 內容賦值。控件要有Content這個屬性,也就是要繼承自ContentControl這個類,才能這麽賦值。夾在標簽中間。

<Button>點我</Button>

2.5 集合賦值。下面例子是給StackPanel.Children這個屬性賦值一個集合,被省略了。這個屬性的類型是UIElementCollection。在這個例子,我們也看到WPF支持一些省略的寫法,在實際開發中運用,可以使XAML代碼更簡潔。

<StackPanel>

<Button>點我</Button>

<Button>點我1</Button>

</StackPanel>

3、命名空間

在WPF中一般用在Root元素上(Application,Window,UserControl,Page,ResourceDictionary等)。如下:

xmlns為引入命名空間的attribute。

第一行xmlns是沒有指定別名的,是默認命名空間,它指定的命名空間包含了微軟提供所有的XAML控件的程序集。

第二、三、四行xmlns別名是x,d,mc,也是微軟提供的命名空間,這裏面主要包含了一些關於解析Xaml語言的程序集。

第五行xmlns是自己引入的,開發人員自己寫的控件等,可以通過命名空間這種方式引用到XAML文檔來使用。

<Window x:Class="WpfApplicationDemo.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:WpfApplicationDemo"

mc:Ignorable="d"

Title="MainWindow" Height="350" Width="525">

<Grid>

<Label x:Name="label" Content="Hello World!" HorizontalAlignment="Left" Margin="39,20,0,0" VerticalAlignment="Top"/>

<Button x:Name="btnClick" Content="點我" Command="{Binding Click}" HorizontalAlignment="Left" Margin="212,136,0,0" VerticalAlignment="Top" Width="75" />

<Button x:Name="btnClick1" HorizontalAlignment="Left" Margin="212,160,0,0" VerticalAlignment="Top" Width="75" Click="btnClick_Click">

<Button.Content>

點我

</Button.Content>

</Button>

</Grid>

</Window>

4、WPF中的兩棵樹

XAML文檔是樹狀結構的。在WPF中有邏輯樹(Logical Tree)和可視樹(Visual Tree)的概念,在運行時會維護這兩棵樹。邏輯樹是以我們看到的控件為節點的,邏輯樹表示UI的核心結構。和XAML文件中定義的元素近乎相等,排除掉內部生成的那些用來幫助渲染的可視化元素。WPF用邏輯樹來決定依賴屬性,值繼承,資源解決方案等。邏輯樹用起來不像可視化樹那麽簡單。對於新手來說,邏輯樹可以包含類型對象,這一點和可視化樹不同,可視化樹只包含Dependancy子類的實例。遍歷邏輯樹時,要記住邏輯樹的葉子可以是任何類型。由於LogicTreeHelper只對DependencyObject有效,遍歷邏輯樹時需要非常小心,最好做類型檢查。而可視樹能看到控件內部的元素,這些元素一般繼承自Visual類。可視化樹代表你界面上所有的渲染在屏幕上的元素。可視化樹用於渲染,事件路由,定位資源(如果該元素沒有邏輯父元素)等。遍歷可視化樹可以簡單的使用VisualTreeHelper和簡單的遞歸方法。WPF提供了兩個輔助類(LogicalTreeHelper and VisualTreeHelper)來操作這兩棵樹。

5、附加屬性,事件

<StackPanel>

  <Button Panel.ZIndex="1">a</Button>

  <Button Panel.ZIndex="2">b</Button>

</StackPanel>

Panel.ZIndex就是附加屬性,而附加事件在界面上用不了。在後面具體實現項目時在來寫附加事件

PS:本人也是WPF的初學者,如有不對的地方,歡迎在評論區多多指教,學習,為了分享,為了提高。

WPF自學入門(一)WPF-XAML基本知識