深入淺出WPF筆記 x 命名空間詳解

2021-10-03 13:31:34 字數 2982 閱讀 4280

「x 命名空間」的這個x是對映xml命名空間時給它取的名字;x命名空間裡的成員是專門寫給xaml編譯器看的、用來引導xaml編譯器把xaml**編譯成clr**。

x 命名空間對映的是xmlns:x="",望文生義,它包含的類均與解析xaml語言相關,所以亦可稱之為「xaml 命名空間」。

attribute和property是兩個層面的東西。attribute是語言層面的東西、是給編譯器看的,property是物件導向層面的東西、是給程式設計邏輯用的,而且乙個xaml標籤的attribute裡大部分都對應著物件的property。在使用xaml程式設計的時候,如果你想給他加上一些特殊的標記從而影響xaml編譯器對它的解析。這時候就需要額外為它新增一些attribute了。

1:x:class

這個attribute的作用是告訴xaml編譯器將xaml標籤的編譯結構和後台**中指定的類合併。在使用x:class時必須遵循以下要求:

(1)這個attribute只能用於根節點。

(2)使用x:class的根節點的型別要與x:class的值所指示的型別保持一致。

(3)x:class的值所指示的型別在宣告時必須使用partial關鍵字。

2:x:classmodifier

這個attribute的作用是告訴xaml編譯由標籤編譯生成的類具有怎麼樣的訪問控制級別。

使用這個attribute時需要注意:

(1)標籤必須具有x:class attribute。

(2)x:classmodifier的值必須與x:class所指示類的訪問控制級別一致。

(3)x:classmodifier的值隨後臺**的編譯語言不同而有所不同。

3:x:name

x:name作用:

(1)告訴xaml編譯器,當乙個標籤帶有x:name時除了為這個標籤生成的對應例項外還要為這個例項宣告乙個引用變數,變數名就是x:name的值。

(2)將xaml標籤所對應物件的name屬性也設為x:name的值,並把這個值註冊到ui樹上,以方便查詢。

name屬性定義在frameworkelement類中,這個類使wpf空間的基類,所以所有wpf控制項都具有name這個屬性。當乙個元素具有name屬性時,使用name或x:name效果是一樣的。name和x:name不能同時出現在乙個元素中。對於那些沒有name屬性的元素,為了在xaml宣告時也建立引用變數以便在c#**中訪問,我們就只能使用x:name。因為x:name的功能涵蓋了name屬性的功能,所以全部使用x:name以增強**的統一性和可讀性。

4:x:fieldmodifier 

使用x:name後,xaml標籤對應的例項就具有了自己的引用變數,而且這些引用變數都是類的字段。既然是類的字段就免不了要關注一下它們的訪問級別。預設情況下,這些欄位的訪問級別按照物件導向的封裝原則被設定成了internal。在程式設計的時候。有時候我們需要從程式集訪問另乙個程式集中窗體的元素,這時候就需要把被訪問的控制項的引用變數改為public級別,x:fieldmodifier就是用來在xaml裡改變引用變數的訪問級別的。

5:x:key

最自然的檢索方式莫過於使用"key-value"對的形式了。在xaml檔案中,我們可以把很多需要多次使用的內容提取出來放在資源字典裡,需要使用使用這個資源的時候就用它的key把它檢索出來。

key的作用就是為資源貼上用於檢索的索引。在wpf中,幾乎每個元素都有自己的resources屬性,這個屬性是個「key-value」式的集合,只要把元素放進這個集合,這個元素就成為資源字典中的乙個條目,當然,為了能夠檢索到這個條件,就必須為它新增x:key。資源(resources)在wpf中非常重要,需要重複使用的xaml內容,如style、各種template和動畫等都需要放在資源裡。

xmlns="/presentation"

xmlns:x=""

xmlns:d=""

xmlns:mc=""

xmlns:sys="clr-namespace:system;assembly=mscorlib"

mc:ignorable="d"

title="mainwindow" height="450" width="800">hello

6:x:shared

x:shared一定要與x:key配合使用,如果x:shared的值為true,那麼每次檢索到這個物件時,我們得到的都是同一物件,否則如果x:shared的值為false,那麼每次檢索到這個物件時,我們得到的都是這個物件的新副本。xaml編譯器會為資源隱藏新增x:shared=「true」,也就是說,預設情況下我們的到的都是同一物件。

標記擴充套件(markup extension)實際上就是一些markupextension類的直接或者間接派生類。x命名空間中就包含有一些這樣的類,所以常稱它們為x命名空間內的標記擴充套件。

1:x:type

x:type的值應該是乙個資料型別的名稱。一般情況下,我們在程式設計中操作的是資料型別的例項或者是例項的引用,但有時候我們也會用到資料型別本身。

當我們在xaml中想表達某個資料型別時就需要使用x:type標記擴充套件。

2:x:null

有時候我們需要顯示地對乙個屬性賦空值。在c#語言裡,使用null關鍵字來表示空值,在xaml裡用來表示空值的是x:null。

3:x:array

x:array的作用就是通過它的item屬性向使用者暴露乙個型別已知的arraylist例項,arraylist內成員的型別由x:array的type指明。

4:x:static

x:static是乙個很常見的標記擴充套件,它的功能是在xaml文件中使用資料型別的static成員。因為xaml不能編寫邏輯**,所以使用x:static訪問的static成員一定是資料型別的屬性或字段。

5:x:xdata

x:xdata標籤是乙個專用標籤。wpf中把包含資料的物件稱為資料來源,用於把資料來源中的資料提供給資料使用者的物件被稱為資料提供者。wpf類庫中包含多種資料提供者,其中有乙個類叫xmldataprovider,專門用於提供xml化的資料。如果想在xaml裡宣告乙個帶有資料的xmldataprovider例項,那麼xmldataprovider例項的資料就要放在x:xdata標籤的內容裡。

深入淺出WPF

深入淺出wpf 基本資訊 更有精彩樣張搶先試讀 試讀的第七章不錯 如果你想做程式設計師的話,就看看吧!非常實用!目錄 寫作緣起 wpf之what why 致謝 第一部分 深入淺出話xaml 第1章 xaml概覽 2 1.1 xaml是什麼 2 1.2 xaml的優點 3 第2章 從零起步認識xaml...

深入淺出WPF

深入淺出wpf 基本資訊 更有精彩樣張搶先試讀 試讀的第七章不錯 如果你想做程式設計師的話,就看看吧!非常實用!目錄 寫作緣起 wpf之what why 致謝 第一部分 深入淺出話xaml 第1章 xaml概覽 2 1.1 xaml是什麼 2 1.2 xaml的優點 3 第2章 從零起步認識xaml...

深入淺出WPF筆記 2

xml語言有乙個功能就是可以在xml文件的標籤上使用xmlns特徵來定義命名空間 namespace xmlns也就是sml namespace的縮寫。定義命名空間的乙個好處就是當 不同的類重名時可以使用命名空間加以區分。xmlns 可選的對映字首 命名空間 如果沒有對映字首說明這個命名空間時預設的...