特殊的 x 命名空间

    这节讲一下XAML 中的 x 命名空间。

    为什么叫它特殊呢,因为x命名空间中的东西是用来服务整个xaml页面的,通过这个命名空间中的工具,可以去扩充xaml的功能,或者帮助我们更好的开发xaml页面。

x命名空间中的工具

    要学习这个命名空间,我们首先要看看这里边都有什么,按照它们的类型,可以分为如下这三组:

        标记扩展:

        x:Array    x:Null    x:Static    x:Type

        附加特性:

        x:Class    x:ClassModifier    x:FieldModifier    x:Key

        x:Name    x:Shared    x:Subclass    x:TypeArguments

        x:Uid

        XAML指令:

        x:Code    x:XData

    标记扩展我们上节有讲,就是在赋值大括号中可以使用的一些东西。

    附加特性我们直接以字面理解即可:元素本身不具有的特性,x命名空间给元素附加上的,比如我们在XAML常用控件这节讲到的Grid分割,Grid中的元素,可以使用Gird.Row或Grid.Column来指定自己在哪一块中,元素本身不具有Grid.Row这样的特性,是Grid给元素附加上的,同样的x命名空间的附加特性也是这样的。    XAML指令则是用于完成一些特殊操作,实际上基本上不会用到。

详解x命名空间的工具

    x:Class:这个工具我们之前在window标签中就见到过,它的作用就是指示当前的xaml文件最后编译成C#类的时候类名是什么,使用这个工具,需要注意其只能应用于根节点,也就是指示它的后台类,另外,标记在window节点上,后台类也必须是window类型,两者类型上不能有差别,同时这个后台类必须要使用partial关键字修饰。

    x:ClassModifier:这个工具跟x:Class是配合使用的,用于控制xaml生成后的类有怎样的访问级别。

<Window x:Class="WpfApp1.MainWindowBase"        
        x:ClassModifier="public"/>        

    x:Name一般的,标签都有自己的名字,给一个标签的Name属性赋值后,就相当于在后台创建一个变量指向该控件,但也有少部分标签没有Name这个属性,我们就可以使用x:Name来实现这个操作。

    x:FieldModifier跟x:ClassModifier一样,是用来修饰控件后台变量的访问级别的,都是跟x:Name配合使用。

    x:Key用于在资源字典中标识一个资源,关于xaml资源会在后期讲到,先看个小例子:

 
<!--在window标签中引入String所在的命名空间,我们以一个字符串做为资源-->
 ...
 xmlns:sys="clr-namespace:System;assembly=mscorlib"
 ...
<Window.Resources> <ResourceDictionary> <sys:String x:Key="show">我是一个资源</sys:String> </ResourceDictionary> </Window.Resources>

    x:Shared:bool值,跟x:Key配合使用,为true则用户每次时候key访问这个资源对象都是同一个,为false则每次都是新资源对象,相当用单例和非单例模式。

    x:Type: 用于指示在标签扩展中值的类型。

    x:Null:等同于C#的null,当你想给xaml标签属性赋空值的时候,就用它吧:

<Button Style="{x:Null}"  Content="{x:Type sys:StringComparison}"/>

    x:Array:用它来包裹一个数据集合,具体用法如下:


 <!--先在window标签中引入String所在的命名空间,我们以字符串集合为例-->
 ...
 xmlns:sys="clr-namespace:System;assembly=mscorlib"
 ...

 <ListBox>
    <ListBox.ItemsSource>
        <x:Array Type="sys:String">
            <sys:String>列表项1</sys:String>
            <sys:String>列表项2</sys:String>
            <sys:String>列表项3</sys:String>
            <sys:String>列表项4</sys:String>
            <sys:String>列表项5</sys:String>
        </x:Array>
    </ListBox.ItemsSource>
</ListBox>

 

    x:Static:当想要访问其它命名空间的静态属性时,需要加上此前缀。

    x:Code 用于包裹一段C#代码,x:XData 用于包裹一些数据,基本上都用不到,感兴趣的小伙伴可以去官网查阅。

本节到此结束...

原文地址:https://www.cnblogs.com/charlesmvp/p/14791824.html