C#中WPF程序的XAML命名空间理解

一、什么是命名空间

        XAML 命名空间实际上是 XML 命名空间概念的扩展。 指定 XAML 命名空间的技术依赖于 XML 命名空间语法、使用 URI 作为命名空间标识符的约定、使用前缀提供从同一标记源中引用多个命名空间的方法,诸如此类。XML 命名空间的 XAML 定义中增加的主要概念是:XAML 命名空间既暗指标记用法的唯一性范围,也影响特定 CLR 命名空间和引用的程序集对标记实体的潜在支持方式。后一种考虑因素也受到 XAML 架构上下文的概念的影响。 但对于 WPF 使用 XAML 命名空间的方式而言,您通常可以将 XAML 命名空间认为是默认 XAML 命名空间、XAML 语言命名空间,以及 XAML 标记直接映射到特定支持 CLR 命名空间和引用程序集的任何进一步的 XAML 命名空间。

二、XAML命名空间的分类

1、xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"       

      首先,xmlns在XML文件中是一个特殊的特性,它的值并不是一个网址,之所以写成网址这样的形式,是为了规范化,因为schemas.microsoft.com是微软专有的,这样就避免了因为名称空间的不统一性造成的相关错误,这个名称空间其实跟C#里面的命名空间是一个意思,只是C#里面命名空间有很多,WPFF中会使用到的命名空间也各有不同,因此,他把整个WPF中核心命名空间全部放在上面这个命名空间里面,这样方便统一管理。

2、xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

     该命名空间称之为“XAML命名空间,而且将它映射为x:前缀,为什么还要引入这个名称空间呢,这是因为,在XML文档中,XML元素是由开发者自己定义的,那么当两个不同的开发者定义了一个同名的元素该怎么办呢,这时候就需要XML命名空间去判断相同的元素到底是哪一个命名空间里面的元素了。由此可见,它的含义与C#,C++里面的名称空间其实是一样的。

      但是他又有自己的特殊性,那是因为WPF中XAML与C#一样,也有自己独立的编译器。XAML会被解析和编译,最终形成微软的中间语言存储在程序集中。在解析和编译XAML的语言过程中,我们经常需要告诉编译器一些重要的信息,比如XAML代码的编译结果应该与哪个C#代码的编译器合并、使用XAML声明的元素师public还是private访问级别等等。这些让程序员能够与XAML编译器沟通的工具就存在x名称空间中。这个名称空间的主要作用在于通过x空间的成员告诉编译器怎么编译XAML,生成什么类名,属性的可访问性等。

三、XML名称空间的分类

1、Attribute

2、标记拓展

3、XAML指令元素

下面我们开始根据分类来看一看它们各自的作用和主要使用方法

1、Attribute

Attribute是语言层面的东西,是给XAML编译器看的,Property是面向对象层面的东西,是给编程逻辑用的。在使用XAML编程的时候,如果你想给他加上一些特殊的标记从而影响XAML编译器对他的解析,那么就要对他添加一些Attribute。(详细信息可以参考我的另一篇文章C#的WPF编程中的Attribute)

常用的一些Attribute

x:Class

这个Attribute主要告诉XAML编译器,编译的XAML将和哪一个类合并。

使用x:Class要注意:这个Attribute只能用于根节点,指向的类必须使用关键字partial

x:ClassModifier

这个Attribute主要告诉XAML编译器,有标签编译生成的类具有怎样的访问控制级别。

x:Name

这个就如winform中的ID一样

x:FieldModifier

这个就是用来在XAML里改变引用变量访问级别的

x:Key

最自然的检索方式莫过于使用"Key-Value"对的形式了。在XAML文件中,我们可以把很多需要多次使用的内容提取出来放在资源字典中,需要用到的时候就用这个Key把它检索出来。

x:Shared

在学习使用x:key时我们已经知道,一旦我们把某些对象当做资源放进资源字典里后就可以把他们检索出来重复使用,那么,每当他们检索到一个对象时,我们得到的究竟是同一个对象呢,还是这个对象的多个副本?这就要看x:Shared怎么设置了,默认为true,我们得到的是同一个对象。如果是false,那么我们得到的是这个对象的一个新副本。

总结:由于在一个标签中的标签的Attribute大部分对应.NET对象的Property。在使用XAML编程的时候,如果你想给它加一点特殊的标记来改变XAML对它的解析,这时候就需要额外的给它添加一些Attribute了

2、标记拓展

标记扩展实际就是一些MarkupExtension类的直接或间接派生类。x名称空间中就包含一些这样的类,所以称其为x名称空间标签的标记扩展。(详细使用方法请参见我的另外一篇文章,C#的WPF编程中的标记拓展)

x:Type

顾名思义,x:Type的值是一个数据类型的名称。编程中也会用到数据类型本身。

x:Null

在c#语言里,我们用null关键字来表示空值,在XAML里我们就用x:Null来表示空值。

x:Array

x:Array的作用就是通过它的Items属性向使用者暴露一个类型已知的ArrayList实例,ArrayList的成员类型由x:Array的Type指明。

x:Static

在XAML文档中使用数据类型的static成员

3、XAML指令元素


x:Code

x:Code可以将逻辑代码放到XAML中运行

x:XData

那就是数据源了,在该标签内的内容可以作为数据源使用

这就是x空间里所有的东西了


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值