WPF基础三:x名称空间

x名称空间的映射:    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

包含的类均和XAML语言相关。

x名称空间包含的工具
 名称种类
X:Array 标记扩展
X:Class 指令
X:ClassModifier 指令 
X:Code 内部 XAML 类型
X:FieldModifier 指令
X:Key 指令
X:Member 指令
X:Members 指令
X:Name 指令
X:Null 标记扩展 
 X:Property 指令
X:Shared 特性 
X:Static 标记扩展 
X:Subclass  指令
X:Type 标记扩展 
X:TypeArguments 指令
X:Uid 指令 
X:XData 内部 XAML 类型
 {} 转义序列-标记扩展 
XAML 中的 lang 处理 
XAML 中的xml:spcae处理 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


X:Array

在解析<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>

X:Class

  • 这个特性(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:ClassModifier

告诉编译器生成的类具有怎么的访问控制级别。

  • 该标签必须具有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>

X:Code

使用它可以将在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

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}" .../>

X:Property

声明标记中的 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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值