WPF學習之二 XAML學習

2021-04-24 10:38:43 字數 4638 閱讀 3203

wpf學習之二:xaml學習

一、什麼是xaml

二、xaml中的元素

xml中的每個通過尖括號括起來的標記都稱之為元素,xaml是基於xml產生的,因此對於這些標記,在xaml中也稱之為元素。但是xaml中的元素種類有很多,下面將分類闡述。下面先給出一段**,然後針對這段**講述各種元素。

click

1、物件元素

看上面的**例子,那幾個是物件元素呢?和都是物件元素。在xaml中定義好了一些規則,xaml中的一些元素對應了clr中的型別(類或結構)。比如元素就對應了system.windows.controls.grid型別,當你通過xaml標記定義了元素對的時候,就相當於在後台**中寫乙個例項化grid的**(gridgrid =newgrid();),這樣就能在程式執行時,例項化物件。

物件元素的例項都是通過呼叫物件元素對應的clr型別的預設建構函式進行建立的,因此類或結構如果需要作為物件元素,那麼必須要有乙個公開的預設建構函式

2、屬性(property)元素

屬性元素用於設定物件元素的屬性(property)。設定物件元素的屬性不是可以通過設定屬性(attribute)值嗎?那為什麼還需要屬性(property)元素呢?這是因為簡單的屬性(attribute)設定並不能滿足這個物件元素的屬性(property)。但是對於同時支援屬性(attribute)語法和屬性(property)元素語法的屬性,我們可以選擇使用其中任何一種。

屬性元素的語法為:《型別名稱.屬性》內容在上面的**例子中:、等都是屬性元素,其中包括的就是乙個類例項。它也是屬性元素,但這個屬性元素等到將集合物件元素的時候再來詳細講述。

3、集合物件元素

集合物件元素指的是這個元素是乙個物件元素,並且它對應的clr型別是乙個集合型別。這種型別的物件元素可以被省略。當你在標記**中使用了集合型別的屬性元素時,xaml處理器會自動建立相應的集合型別例項。根據msdn說法,在xaml中這種特意省略集合物件元素的這種語法被稱為」隱式集合語法」。

「隱式集合語法」適用於實現ilist或idictionary的型別,或者適用於陣列。

在上面給出的**中,在下面一層應該還存在乙個,但是它可以省略。此處不存在這個集合物件元素的另外乙個原因是,它不能存在,因為這個型別不存在公開的預設建構函式。

三、xaml中的屬性

1、屬性(attribute)語法

clr型別中的屬性(property)在xaml標記語言中通常表示為屬性(attribute)。因此,通過設定物件元素的屬性(attribute)成為設定設定屬性(property)值最為直接的方法。

如上面的**中,設定了height(高度)、horizontalaligment(水平對齊)等等屬性。

2、屬性(property)元素語法

這個語法功能在上面的元素板塊已經講述,此處便不做闡述了。

3、集合屬性

這個屬性在上面集合物件元素處也已經講述,此處也不做闡述了。

4、內容屬性

內容屬性是xaml提供的乙個語言功能,它可以將clr型別中的任何乙個屬性作為該型別例項的內容屬性。設定內容屬性的方法是在類上設定contentpropertyattribute。在標記中,xaml內容屬性可以省略。同時,在標記中指定的任何子元素都將成為內容屬性的值。

如上面**,children是child從panel中繼承獲得的,panel將children設定為其內容屬性。因此該屬性可以省略。

同時,必須注意,xaml內容屬性的值必須是連續的,即它必須全部在該物件元素的其它屬性元素之前或之後指定。

5、附加屬性(property)

xaml提供了一種語言功能,它允許你在任何元素上指定某些屬性,但是該屬性可以不在當前指定的元素上。

按照msdn說法,附加屬性(property)通常通過屬性(attribute)語法來設定。其語法格式為所有者型別.屬性

看下面的**:

button

上面的**中button將被放置在dockpanel的左邊。通過這種附加屬性就可以把子元素中設定其在父元素中的位置。

6、依賴屬性(dependency property)

依賴屬性是xaml提供的一種很好的功能,它提供了一種方法,通過這種方法使我們可以通過其它輸入值來計算目標屬性值。依賴屬性比較複雜,內容較多,下次再來詳述。

四、xaml中的型別轉換(typeconverter)

型別轉化其實不是在xaml中剛出現的,在以前的版本中就已經有了,那以前用於幹什麼呢?最常用的屬性視窗。屬性視窗的的屬性可不一定都是字串,有許多複雜的型別,但是它都可以把它顯示成字串的形式,為什麼?就是利用了型別轉換,在字串和不同型別之間進行轉換。

其實現在的xaml屬性(attribute)也是如此,並非所有的屬性值都是字串,但是通過型別轉換卻可以把它轉換成字串,方便顯示。具體如何使用,以後詳述。

五、標記擴充套件(markupextensible)

為什麼要提供標記擴充套件功能呢?因為xaml需要一些標準功能或者預設行為無法滿足的功能,比如屬性賦值,它可能並不是直接賦乙個字串,而是要對已定義的物件的乙個引用,由此便誕生了標記擴充套件。

標記擴充套件的語法是使用」{}」。

1、特定於wpf的標記擴充套件

下面簡單列舉wpf中的重要標記擴充套件。

staticresource:通過引用已定義資源的值來為xaml屬性提供值。

dynamicresource:通過將資源的引用推遲到執行時來為xaml屬性提供值。動態資源引用強制來每次訪問此類資源時都進行重新訪問。

binding:按引用於元素的資料上下文來為屬性提供資料繫結值。

relativesource:在執行時,為了可以在元素樹中定位若干可能關係的binding提供源資訊。

templatebinding:提供資料模板繫結。

2、xaml定義的標記擴充套件

x:type:為所提供的型別提供type物件。

x:static:為屬性值提供已定義的靜態值。該靜態值必須在引用之前定義。

x:null:將null指定為xaml屬性的值。

x:array:為xaml中常規陣列的建立提供支援。

六、xaml命名空間

1、系統命名空間對映

在每個通過vs進行建立的window或者page中,都存在以下兩個命名空間。

第乙個指的是wpf命名空間,它包括了大部分的wpf型別,並將其作為預設命名空間。

第二個指的是xaml命名空間,它指的是xaml可擴充套件標記語言的命名空間。

xaml是乙個語言規範,或者語言定義。而wpf則是基於這種語言的乙個實現。

2、對映自己的命名空間

其實,我們自已也可以把我們定義的類的命名空間對映到xaml中。如下面所示:

如果你對映的命名空間就在當前程式集內,則assembly可以省略。

3、 將clr命名空間對映為xaml命名空間

上面說的系統命名空間其實它也有clr命名空間,只是它通過了一種方式把它進行了轉換。它的方法就是使用xmlnsdefinitionattribute。通過多次指定這個屬性,可以將多個clr命名空間對映為xaml命名空間。

我們可以通過使用reflector工具來檢視presentationframework.dll。用藍色框框圈起來的就是相應的對映關係。

WPF學習之路(二) XAML

在wpf中引入了xaml語言,主要用於介面設計,業務邏輯則使用c 實現後台 將介面設計與業務邏輯分離 xaml是一種宣告式語言,類似xml html 示例 hello xaml 這是乙個普通的button hello xaml 在面板 dockpanel 視窗中有兩個button xaml有兩個重要...

WPF學習之路(二) XAML 續

屬性 簡單屬性 前面用到的width height都是簡單屬性,其賦值一定要放到雙引號裡 xaml解析器會根據屬性的型別執行隱式轉換 與c 的區別 solidbrush.color colors.aliceblue c 中有的列舉型別可以用 運算子組合,在xaml中用 分隔 附加屬性 附加屬性可以用...

學習WPF 了解WPF中的XAML

xaml的簡單說明 xaml是用於例項化.net物件的標記語言,主要用於構建wpf的使用者介面 xaml中的每乙個元素都對映為.net類的乙個例項,例如對映為wpf的button物件 xaml可以在乙個元素中巢狀另乙個元素,例如grid元素可以巢狀button元素 了解xaml visualstud...