目錄
- x命名空間內容
- x命名空間的Attribute
- x:Class
- x:ClassModifier
- x:Name
- x:FieldModifier
- x:Key
- x:Shared
- x命名空間的標記擴展
- x:Type
- x:Null
- x:Array
- x:Static
- x命名空間的XAML指令元素
- x:Code
- x:XData
- 參考資料
“x命名空間”的x是映射XML命名空間時給它取的名字(取XAML的首字母),里面的成員(如xClass、x:Name)是專門寫給XAML編譯器看、用來引導XAML編譯器把XAML代碼編譯成CLR代碼的,
x命名空間內容
x命名空間映射的是http://schemas.microsoft.com/winfx/2006/xaml,包含的類均與決議XAML語言相關,所以亦可稱之為“XAML命名空間”,x命名空間里面的類能讓程式員與XAML編譯器溝通,如下表所示:
| 名稱 | 類別 |
|---|---|
| x:Array | 標記擴展 |
| x:Class | Attribute |
| x:ClassModifier | Attribute |
| x:Code | XAML指令元素 |
| x:FieldModifier | Attribute |
| x:Key | Attribute |
| x:Name | Attribute |
| x:Null | 標記擴展 |
| x:Shared | Attribute |
| x:Property | Attribute |
| x:Static | 標記擴展 |
| x:Subclass | Attribute |
| x:Type | 標記擴展 |
| x:TypeArguments | Attribute |
| x:Uid | Attribute |
| x:XData | XAML指令元素 |
由上面的表可以看出,它們可以分為Attribute、標記擴展和XAML指令元素,
x命名空間的Attribute
x:Class
作用:為標簽添加xClass=“目標類名”這樣一個Attribute(x:Class這個Attribute并不是物件的成員),告訴XAML編譯器將編譯結果與哪個C#編譯的類合并,
用法:namespace可選,classname必需,
<x:Code>
// 代碼說明,通常包含在CDATA中
</x:Code>
注意:x:Class只能在XAML生產的根元素上指定,對于在XAML中具有父物件的任何物件無效,
注:x:Property、x:TypeArguments、x:Uid、x:Subclass不常用,暫不介紹,
x:ClassModifier
作用:告訴XAML編譯由標簽編譯生成的類具有怎樣的訪問控制級別,
用法:
<object x: x:ClassModifier="NotPublic">
...
</object>
注意:必須在同一元素上提供x:Class,并且該元素必須是頁面中的根元素,
x:Name
作用:
- 告訴XAML編評器,當一個標簽帶有x:Name時除了為這個標簽生成對應實體外還要為這個實體宣告一個參考變數,變數名就是x:Name的值,
- 將XAML標簽所對應物件的Name 屬性(如果有)也設為x:Name的值,并把這個值過冊到UI樹上,以方發查找,
用法:
<object x:Name="XAMLNameValue".../>
注意:物件有Name屬性時Name和x:Name是可以互換的,物件沒有Name屬性時只能用x:Name,全部使用x:Name以增強代碼的統一性和可讀性,
x:FieldModifier
作用:使用x:Name后,XAML標簽對應的實體就具有了自己的參考變數(類的欄位),x:FieldModifier就是用來在XAML里改變參考變數訪問級別的,
用法:
<object x:FieldModifier="Public".../>
注意:使用x:FieldModifier的前提是這個標簽同時也使用x:Name,該XAML標簽的根元素必須宣告x:Class指令,
x:Key
作用:唯一標識在XAML定義的字典中創建和參考的元素,x:Key在 XAML 物件元素中添加值是在資源字典中標識資源的最常見方法,
用法:
先在Window的資源字典里添加一個條目(一個字串),在XAML中多次使用這個字串,代碼如下:
<Window x: x:ClassModifier="internal"
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:LearnWpf"
xmlns:sys ="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
Title="MainWindow" Height="165.79" Width="232.72">
<Window.Resources>
<sys:String x:Key="myString">Hello WPF Resoureel</sys:String>
</Window.Resources>
<Grid>
<TextBox HorizontalAlignment="Left" Height="23" Margin="58,38,0,0" TextWrapping="Wrap" Text="{StaticResource myString}" VerticalAlignment="Top" Width="120"/>
<TextBox HorizontalAlignment="Left" Height="23" Margin="58,66,0,0" TextWrapping="Wrap" x:Name="textBox1" VerticalAlignment="Top" Width="120"/>
<Button Content="Button" HorizontalAlignment="Left" Margin="58,94,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
</Grid>
</Window>
資源不但可以在XAML中訪問,在C#中也可以訪問,代碼如下:
private void Button_Click(object sender, RoutedEventArgs e)
{
string str=this.FindResource("myString") as string;
this.textBox1.Text = str;
}
x:Shared
作用:設定false為時,修改WPF資源檢索行為,以便對屬性資源的請求為每個請求創建一個新實體(默認值為true,即所有請求共享同一實體),
用法:
<ResourceDictionary>
<object x:Shared="false".../>
</ResourceDictionary>
注意:x:Shared一定要**與x:Key配合使用,
x命名空間的標記擴展
x:Type
作用:當在XAML中想表達某個資料型別時就需要使用x:Type標記擴展,比如為某個類的一個屬性賦值,它的值要求是一種資料型別,
用法:創建了一個Button的派生類,點擊按鈕時彈出一個自定義表單MyWindow,代碼如下:
<Grid>
<local:MyButton Content="Show" UserWindowType="{x:Type TypeName=local:MyWindow}" Margin="5"/>
</Grid>
class MyButton : Button
{
public Type UserWindowType { get; set; }
protected override void OnClick()
{
base.OnClick();// 激發Click事件
Window win = Activator.CreateInstance(this.UserWindowType) as Window;
if (win != null)
{
win.ShowDialog();
}
}
}
注意:因為TypeExtension類的構造器可以接受資料型別名作為引數,所以完全可以這樣寫:
UserWindow Type="{x:Type local:MyWindow}"
x:Null
作用:指定null作為XAML成員的值,
用法:如果一個屬性具有默認值而我們又不需要這個默認值時就需要顯式地設定nul值了,如顯式地將某個實體的Style屬性設定為x:Null,代碼如下:
<Window.Resources>
<Style x:Key="{x:Type Button}" TargetType="{x:Type Button}">
<Setter Property="Width" Value="https://www.cnblogs.com/timefiles/archive/2021/01/31/60"/>
<Setter Property="Height" Value="https://www.cnblogs.com/timefiles/archive/2021/01/31/36"/>
<Setter Property="Margin" Value="https://www.cnblogs.com/timefiles/archive/2021/01/31/5"/>
</Style>
</Window.Resources>
<Grid>
<Button Content="Button" HorizontalAlignment="Left" Margin="51,48,0,0" VerticalAlignment="Top" Width="75"/>
<Button Content="Button" HorizontalAlignment="Left" Margin="51,89,0,0" VerticalAlignment="Top" Width="75"/>
<Button Content="Button" HorizontalAlignment="Left" Margin="51,145,0,0" VerticalAlignment="Top" Width="75" Style="{x:Null}"/>
</Grid>
x:Array
作用:通過x:Array的Items屬性向使用者暴露一個型別已知的ArrayList實體,ArrayList內成員的型別由x:Array的Type指明,
用法:下面這個例子是把一個x:Array當作資料源(在WPF中把包含資料的物件稱為資料源)向一個ListBox提供資料,代碼如下:
<Grid>
<ListBox >
<ListBox.ItemsSource>
<x:Array Type="sys:String">
<sys:String>Tim</sys:String>
<sys:String>Tom</sys:String>
<sys:String>Victor</sys:String>
</x:Array>
</ListBox.ItemsSource>
</ListBox>
</Grid>
注意:在XAML檔案里宣告一個包含資料的x:Array 實體,必須使用標簽式宣告才能做到,
x:Static
作用:在XAML檔案中使用資料型別的static成員,一個很常用的標記擴展,
用法:
<object property="{x:Static prefix:typeName.staticMemberName}" .../>
x命名空間的XAML指令元素
x:Code
作用:允許在XAML生產中放置代碼, 此類代碼可由編譯XAML的任何XAML處理器實作進行編譯,或在XAML生產環境中保留,以供以后使用(如運行時的解釋)使用,
用法:建議將代碼包含在CDATA中
<x:Code>
// 此處的代碼格式和后臺代碼檔案中的格式相同
</x:Code>
<!--例如-->
<x:Code>
<![CDATA[
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("x:Code代碼");
}
]]>
</x:Code>
注意:
- x:Code指令元素必須是XAML生成的根元素的直接子元素,
- 必須在父根元素上提供X:Class 指令,
- 定義的所有代碼必須是此分部類的成員或變數,
- 除了在分部類中嵌套類之外,不能定義其他類,
- 對分部類之外的代碼物體的參考必須完全限定,
x:XData
作用:啟用XML資料島在XAML中的放置,x:XData可以包含任意格式正確的XML,
WPF中把包含資料的物件稱為資料源,用于把資料源中的資料提供給資料使用者的物件被稱為資料提供者(Data Provider),WPF類別庫中包含多種資料提供者,其中有一個類叫XmlDataProvider,專門用于提供XML化的資料,如果想在XAML里宣告一個帶有資料的XmlDataProvider 實體,那么XmlDataProvider 實體的資料就要放在x:XData標簽的內容里,
用法:
<x:XData>
<elementDataRoot>
[elementData]
</elementDataRoot>
</x:XData>
參考資料
深入淺出WPF筆記——X名稱空間詳解
XAML 命名空間 (x:)語言功能
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/255034.html
標籤:.NET技术
下一篇:WPF之x命名空間
