x名称空间的映射: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
包含的类均和XAML语言相关。
在解析<x:Array>标签的时候。编译器会生成调用AddChild方法,把<x:Array>标签的子元素逐个添加到x:Array实例中。
<!--XAML 对象元素用法-->
<x:Array Type="typeName">
arrayContents
</x:Array>
<!--范例-->
<x:Array Type="sys:String"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String>Hello</sys:String>
<sys:String>World</sys:String>
</x:Array>
- 这个特性(Attribute)只能用于跟结点
- 使用x:Class的根结点类型要与x:Class的值所指示的类型保持一致
- x:Class的值所在的类型在声明时必须使用partial关键字
<!--XAML 对象元素用法-->
<object x:Class="namespace.classname"...>
...
</object>
<!--范例-->
<Window
x:Class="_3_x名称空间.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
</Grid>
</Window>
告诉编译器生成的类具有怎么的访问控制级别。
- 该标签必须具有x:Class Attribute
- x:ClassModifier的值必须与x:Class所指示类的访问控制级别一致
<!--XAML 对象元素用法-->
<object x:Class="namespace.classname" x:ClassModifier="NotPublic">
...
</object>
<!--范例-->
<Window
x:Class="_3_x名称空间.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:local="clr-namespace:_3_x名称空间"
x:ClassModifier="public"">
<Grid/>
</Window>
使用它可以将在C#的代码搬到XAML中。
<!--XAML 对象元素用法-->
<x:Code>
// code instructions, usually enclosed by CDATA...
</x:Code>
<!--范例-->
<Window x:Class="_2_XAML的事件_引用和注释.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
...>
<Grid>
<StackPanel>
<Button Content="事件" Click="Button_Click"/>
</StackPanel>
</Grid>
<x:Code>
<![CDATA[
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("These codes are in the Xaml");
}
]]>
</x:Code>
</Window>
x:FieldModifier
与声明类或其成员的常规访问级别无关。
当处理作为 XAML 生产一部分的特定 XAML 对象时,此方法仅适用于 XAML 处理行为,并成为可在应用程序的对象图中访问的对象。
与x:Name搭配使用。
<!--XAML 对象元素用法-->
<object x:FieldModifier="Public".../>
<!--范例-->
<Window
x:Class="_3_x名称空间.MainWindow"
...>
<Grid>
<Button
x:Name="btn1"
Width="200"
Height="20"
x:FieldModifier="public"
Content="按钮测试<}" />
</Grid>
</Window>
X:Key
x:Key的作用就是为资源贴上用于检索的索引。在 XAML 对象元素中添加值是在资源字典中标识资源的最常见方法。
<!--XAML 对象元素用法-->
<object x:Key="stringKeyValue".../>
-or-
<object x:Key="{markupExtensionUsage}".../>
<!--范例-->
<object.Resources>
<object x:Key="stringKeyValue".../>
</object.Resources>
-or-
<object.Resources>
<object x:Key="{markupExtensionUsage}".../>
</object.Resources>
X:Member
在标记中声明一个 XAML 成员。
<!--XAML 对象元素用法-->
<object x:Class="className">
<x:Members>
<x:Member Name="propertyName"/>
additionalMembers
</x:Members>
</object>
X:Members
保存一组在标记中定义的成员,这些成员应用于父元素的 x:Class。
<!--XAML 对象元素用法-->
<object x:Class="className">
<x:Members>
oneOrMoreMembers
</x:Members
</object>
X:Name
XAML这种对象声明语言只负责声明对象而不负责为这些对象声明引用变量。
需要在后台代码中引用XAML中的变量时,需要用x:Name创建引用变量。
<!--XAML 对象元素用法-->
<object x:Name="XAMLNameValue".../>
<!--范例-->
<Window
x:Class="_3_x名称空间.MainWindow"
...
/>
<Grid>
<Button
x:Name="btn1"
Width="200"
Height="20" />
</Grid>
</Window>
x:Null
显示地对一个属性赋一个空值。
<!--XAML 对象元素用法-->
<object property="{x:Null}" .../>
声明标记中的 XAML 属性。
<!--XAML 对象元素用法-->
<object x:Class="className">
<x:Members>
<x:Property Name="propertyName" Type="propertyType"/>
additionalProperties
</x:Members>
</object>
X:Shared
当设置为时 false ,将修改 WPF 资源检索行为,以便对特性化资源的请求为每个请求创建一个新的实例,而不是为所有请求共享同一个实例。
<!--XAML 对象元素用法-->
<ResourceDictionary>
<object x:Shared="false".../>
</ResourceDictionary>
<!--范例-->
<Window
x:Class="_3_x名称空间.MainWindow"
...">
<Window.Resources >
<sys:String x:Key="s1" x:Shared="false">按钮测试</sys:String>
<Style x:Key="myStyle1" TargetType="{x:Type Button}" x:Shared="true">
<Setter Property="Background" Value="LightYellow" />
<Setter Property="Foreground" Value="SkyBlue" />
</Style>
</Window.Resources>
<Grid>
</Grid>
</Window>
X:Static
引用在公共语言规范中定义的任何静态的按值代码实体 (符合 CLS) 的方式。 引用的静态属性可用于在 XAML 中提供属性的值。
使用x:Static访问的静态成员一定是数据类型的属性或字段。
<!--XAML 对象元素用法-->
<object property="{x:Static prefix:typeName.staticMemberName}" .../>
<x:Static Member="prefix:typeName.staticMemberName" ... />
<object property="{x:Static Member=prefix:typeName.staticMemberName}" ... />
X:Subclass
如果 x:Class 还提供了,则修改 XAML 标记编译行为。 不是创建基于的分部类,而是将 x:Class 提供的 x:Class 作为中间类创建,然后提供的派生类应基于 x:Class 。
x:Subclass 可以位于页根上,也可以位于 Application 应用程序定义中已有的根上 x:Class 。
<!--XAML 对象元素用法-->
<object x:Class="namespace.classname" x:Subclass="subclassNamespace.subclassName">
...
</object>
X:Type
提供作为 Type 指定 XAML 类型的基础类型的 CLR 对象。
<!--XAML 对象元素用法-->
<object property="{x:Type prefix:typeNameValue}" .../>
<x:Type TypeName="prefix:typeNameValue"/>
<!--范例-->
<Window
x:Class="_3_x名称空间.MainWindow"
...
>
<Window.Resources >
<sys:String x:Key="s1" x:Shared="false">按钮测试</sys:String>
<Style x:Key="myStyle1" TargetType="{x:Type Button}" x:Shared="true">
<Setter Property="Background" Value="LightYellow" />
<Setter Property="Foreground" Value="SkyBlue" />
</Style>
</Window.Resources>
</Window>
X:TypeArguments
将泛型的约束类型参数传递到泛型类型的构造函数。
<!--XAML 对象元素用法-->
<object x:TypeArguments="typeString" .../>
<!--范例-->
<Window
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib" />
<scg:List x:TypeArguments="sys:String" ...>List<T>使用类型参数实例化新的 String 。
<scg:Dictionary x:TypeArguments="sys:String,sys:String" ...>Dictionary<TKey,TValue>使用两个类型参数实例化一个新的 String 。
<scg:Queue x:TypeArguments="scg:KeyValuePair(sys:String,sys:String)" ...> 实例化一个新 Queue<T> 的,它的约束具有 KeyValuePair<TKey,TValue> 内部约束类型参数 String 和 String 。
X:Uid
为标记元素提供一个唯一标识符。 在许多情况下,XAML 本地化流程和工具使用此唯一标识符。
<!--XAML 对象元素用法-->
<object x:Uid="identifier"... />
X:XData 内部 XAML
x:XData 可以包含任意格式正确的 XML。
对象中的 XML 元素 x:XData
可以在数据中重新声明包含 XMLDOM 的所有可能的命名空间和前缀。
<!--XAML 对象元素用法-->
<XmlDataProvider>
<x:XData>
<elementDataRoot>
[elementData]
</elementDataRoot>
</x:XData>
</XmlDataProvider>
{} 转义序列-标记扩展
提供特性值的 XAML 转义序列。 转义序列允许将属性中的后续值解释为文本。
<!--XAML 对象元素用法-->
<object property="{} literalValue" .../>
or
<object>
<object.property>
{} literalValue
</object.property>
</object>
<!--范例-->
<StackPanel Name="stacky">
<StackPanel.Resources>
<DataTemplate DataType="{}{http://planetsNS}Planet" >
<StackPanel Orientation="Horizontal">
<TextBlock Width="100" Text="{Binding Path=Element[{http://planetsNS}DiameterKM].Value}" />
<TextBlock Width="100" Text="{Binding Path=Attribute[Name].Value}" />
<TextBlock Text="{Binding Path=Element[{http://planetsNS}Details].Value}" />
</StackPanel>
</DataTemplate>
</StackPanel.Resources>
XAML 中的 lang 处理
xml:lang
特性是一个 xml 定义的特性,用于声明 xml 中某个元素的语言和区域性信息。 此属性的相同含义在 XAML 中持续存在;但有一些其他注意事项。
<!--XAML 对象元素用法-->
<object xml:lang="rfc3066lang" />
XAML 中的xml:spcae处理
xml:space
特性是一个 XML 定义的特性,用于声明对象元素内的有效空白处理行为。
<!--XAML 对象元素用法-->
<object xml:space="preserve" />
<object xml:space="default" />
综合范例
<Window
x:Class="_3_x名称空间.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:local="clr-namespace:_3_x名称空间"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow"
Width="800"
Height="450"
x:ClassModifier="public"
mc:Ignorable="d">
<Window.Resources >
<sys:String x:Key="s1" x:Shared="false">按钮测试</sys:String>
<Style x:Key="myStyle1" TargetType="{x:Type Button}" x:Shared="true">
<Setter Property="Background" Value="LightYellow" />
<Setter Property="Foreground" Value="SkyBlue" />
</Style>
</Window.Resources>
<Grid>
<Button
x:Name="btn1"
Width="200"
Height="20"
x:FieldModifier="public"
Content="{Binding Source={StaticResource s1}}"
Style="{StaticResource myStyle1}" />
</Grid>
</Window>
参开《深入浅出WPF》刘铁锰
MSDN