首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

2.3  命名空间

比较上述XAML代码示例和相应的C#代码示例,最神秘的地方在于XML命名空间(http:// schemas.microsoft.com/winfx/2006/xaml/presentation)是如何被映射到.NET命名空间(System. Windows.Controls)上的。该映射及其他WPF命名空间的映射是在WPF程序集中硬编码完成的,里面有好几个XmlnsDefinitionAttribute自定义特性的实例。(顺便说一句,在schemas.microsoft. com这个URL中不存在网页——这仅仅是一个人为设定的字符串,就像其他命名空间一样。)

XAML文件的根对象元素必须指定至少一个XML命名空间,用于验证自己和子元素。你可以(在根元素或子元素上)声明额外的XML命名空间,但每一个命名空间下的标识符都必须有一个唯一的前缀,例如,WPF的XAML文件都会使用第二个命名空间加上前缀x(记作xmlns:x而不仅仅是xmlns):

这是XAML语言命名空间,用于映射System.Windows.Markup命名空间中的类型,而且它也定义了XAML编译器或解析器中的一些特殊的指令。这些指令通常是作为XML元素的特性出现的,因此它们看上去像宿主元素的属性,但实际上并不是如此。如果想了解XAML关键字,请见2.8.3节。

我们把http://schemas.microsoft.com/winfx/2006/xaml/presentatio作为默认(主要)命名空间,把http://schemas.microsoft.com/winfx/2006/xaml 作为次要命名空间,次要命名空间的前缀是x,这仅仅是一个规则,就像C#文件要以using System;指令开始一样。你可以如下改写原来那个XAML文件,意思是相同的。

当然,从可读性来讲,在使用这些常见的命名空间的时候不需要前缀(即原始的XML命名空间),其他一些命名空间则使用一个短前缀,这样处理是有道理的。

隐式.NET命名空间

WPF把下面所有的.NET命名空间映射到XML命名空间http://schemas.microsoft.com/ winfx/2006/xaml/presentation ,而这个命名空间将在整本书中使用。

q System.Windows

q System.Windows.Automation

q System.Windows.Controls

q System.Windows.Controls.Primitives

q System.Windows.Data

q System.Windows.Documents

q System.Windows.Forms.Integration

q System.Windows.Ink

q System.Windows.Input

q System.Windows.Media

q System.Windows.Media.Animation

q System.Windows.Media.Effects

q System.Windows.Media.Imaging

q System.Windows.Media.Media3D

q System.Windows.Media.TextFormatting

q System.Windows.Navigation

q System.Windows.Shapes

因为这是一个多对一的映射,WPF的设计者需要保证不要引入两个同样名称的类,虽然这些类是放在不同的.NET命名空间中的。

提示     本章中独立的XAML示例显式地指定了它们的命名空间,但是在后面的章节,大多数示例是假设http://schemas.microsoft.com/winfx/2006/xaml/presentation命名空间被声明为主要命名空间,而http://schemas.microsoft.com/winfx/2006/xaml则被声明为次要命名空间,前缀是x。如果你想在IE浏览器中查看这些内容,或者将它们复制到像XamlPad这样的应用程序中,请确保这两个命名空间已经显式添加。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论