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

1、基本概念程序員

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

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

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

四、WPF中XAML是大小寫敏感的。學習

2、基本語法spa

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

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

新建WPF項目orm

 

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

 

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

 

 

 

 

一、標籤語法=對象元素(Object Elements)

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

 

運行效果

 

二、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>

 

三、命名空間

     在WPF中通常用在Root元素上(Application,Window,UserControl,Page,ResourceDictionary等)。以下:

       xmlns爲引入命名空間的attribute。

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

       第2、3、四行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>

 

四、WPF中的兩棵樹

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

 

五、附加屬性,事件

     <StackPanel>

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

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

    </StackPanel>

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

      

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

相關文章
相關標籤/搜索