x名稱空間由來:
x名稱空間里的成員是專門為XAML編譯器看的,用來引導XAML編譯器把XAML編譯成CLR代碼,因此x是XAML的首字母。通過x空間的成員告訴編譯器怎么編譯XAML,生成什么類名,屬性的可訪問性等。
x名稱空間中的Attribute:
x:Class,用來告訴XAML編譯器把XAML標簽的編譯結果與后台代碼的哪個類合並,只能用於根節點,並且根節點的類型要與后台代碼的類保持一致。
x:ClassModifier,用來告訴XAML編譯器把XAML標簽編譯成的類具有怎樣的訪問級別,必須具有x:Class Attribute的標簽才能應用,並且與指定的后端代碼訪問級別一致。
x:Name,用來告訴XAML編譯器把創建的對象指向到指定的變量名,這樣可以直接在代碼中引用該對象。如果標簽具有Name屬性,同時把Name屬性賦值為x:Name指定的值。為了增強代碼的統一性,全部使用x:Name來指定對象的變量名。
x:FieldModifier,用來告訴XAML編譯器由該標簽生成的類的字段的訪問級別,默認為internal。
x:Key,為資源字典指定key值,在XAML中通過StaticResource標記擴展進行資源檢索時使用,並且可以自動向父級元素檢索並一直遞歸直到找到該資源或到達Application。通過在代碼中使用.FindResource方法也可以進行遞歸檢索資源。
x:Shared,與x:Key配合使用,用來指定檢索資源對象時,是使用同一個對象副本還是不同的對象,默認x:Share=“True”,因此資源檢索得到的是同一個對象。
x名稱空間中的標記擴展:
x:Type,類型為TypeExtension的標記擴展,用來在XAML中指定Type類型,與C#中的typeof關鍵字類似。x:Type的默認參數為類型,如{x:Type local:MyWindow}或{x:Type TypeName=local:MyWindow}。
x:Null,類型為NullExtension的標記擴展,用來在XAML中顯示為屬性指定Null值,如果在資源字典中定義了Style並把key和TargetType都指定為目標類型,則目標類型的所有標簽都默認使用該Style。如果控件不想使用默認Style,則可以為Style指定null,如Style={x:Null}。
標記擴展除了使用標准的大括號形式使用,還可以使用屬性元素的語法聲明,如<Button.Style><x:Null /></Button.Style>,顯然這種寫法太繁瑣,但如果使用x:Array標記擴展,則必須使用這種標簽形式語法。
x:Array,類型為ArrayExtension的標記擴展,用來在XAML中聲明數組對象,只能使用標簽語法,如以下代碼片段
<ListBox>
<ListBox.ItemsSource>
<x:Array Type="sys:String">
<sys:String>String1</sys:String>
<sys:String>String2</sys:String>
<sys:String>String3</sys:String>
</x:Array>
</ListBox.ItemsSource>
</ListBox>
x:Static,類型為StaticExtension的標記擴展,用來在XAML中引用類的靜態字段或靜態屬性,如Text={x:Static local:Window1.ShowText}。
XAML指令元素:
XAML指令元素只有兩個,x:Code和x:XData,x:Code用來把C#代碼放到XAML中,x:XData用來為數據提供者提供數據,如以下代碼片段
<Page.Resources>
<XmlDataProvider x:Key="asdf">
<x:XData>
<Root>
<Item>Item1</Item>
<Item>Item2</Item>
</Root>
</x:XData>
</XmlDataProvider>
</Page.Resources>
