关闭

【C#】wpf中的xmlns命名空间为什么是一个网址,代表了什么意思

标签: wpf
1970人阅读 评论(1) 收藏 举报
分类:

新建一个wpf的项目,我们先来看下它默认的命名空间都是哪些?


可以看到xmlns有的是网址,有的是clr-namespace开头的一串字母。clr开头的比较好理解,就是运行时的命名空间,就像C#代码中的using xxxx之类的一样。

但是对于网址开头的命名空间有可能就有点疑惑了,它究竟代表的是什么?xaml文件被解析的时候会访问这个网址吗?如果这个网址那天不能get了,那我们的程序是不是就不能正常运行了。

在这里我先把结论告诉大家,然后在一步步分析是为什么。


结论:

以xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation这个为例,其实它就是System.Windows,System.Windows.Automation,System.Winjdows.Controls....等一系列命名空间的集合,是这个集合的【别名】,在浏览器输入这个网址有时候是不可访问的。如果自己定义类库的话,我把这个【别名】叫做张三也是可以的。微软建议,这个一般定义为公司网址,或者个人网址。


分析:

我们一步步来看看,为什么我们添加一个引用后,xmlns那里能够自动进行提示相应的网址。


1.用.NetReflector反编译WindowsBase.dll,可以看到:


那个http开头的命名空间,与N个传统的命名空间做了映射。

2.自定义一个类库也采用网址命名空间的这种方式。

新建一个wpf类库项目,名为WpfLibrary。更改其AssemblyInfo.cs文件,增加这么一行:

[assembly: XmlnsDefinition("www.wangzhi.com", "WpfLibrary")]
注意添加using System.Windows.Markup;

添加后的就是这样子:



3.新建一个Wpf Application项目,在引用里添加第二步中生成的dll文件。

在添加命名空间的时候,我们可以看到自动提示:


4.再尝试另一种方式的命名空间

我们将添加的那句assemlby:xmlnsdefinition(.......)去掉,然后重新生成类库,在重新添加引用。那么这次智能提示里肯定没有www.wangzhi.com这个命名空间了。有的是这个:


5.由此可见,网址形式的命名空间等价于传统形式的命名空间,而且还可以是1对N的关系。网址形式的写一行,抵得上传统形式的N多行,节约手工代码量。




1
0
查看评论

关于Android命名空间的那些事,也就是xmlns这个

我今天讲到的Android命名空间的概念不是基于Java的而是对应xml文件来说的,也就是xmlns这个,我们随便打开一个Android工程的xml文件看到最多的是下面这代码“<问号xml version="1.0" encoding="utf-8"...
  • u013110200
  • u013110200
  • 2016-11-21 13:20
  • 210

WPF学习之X名称空间详解

X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的、用来引导XAML代码将XAML代码编译为CLR代码。 4.1X名称空间里面到底都有些什么? x名称空间映射的是:http://schemas.microsoft.com/winfx/2006/xaml,望文生义,它...
  • fwj380891124
  • fwj380891124
  • 2012-10-22 18:51
  • 25372

XML Schema命名空间:xmlns介绍

XML和Schema具有无关平台,技术厂商,简单,规范统一等特点,极具开放性,所以使用极为广泛,而且使用简单,在XML和Schema和,名称空间是W3C推荐标准提供的一种统一命名XML文档中的元素和属性的机制。使用名称空间可以明确标识和组合XML文档中来自不同标记词汇表的元素和属性,避免了名称之间的...
  • Aeroleo
  • Aeroleo
  • 2015-08-09 18:05
  • 1897

wpf中:xaml中的命名空间的引入方法

 wpf中:xaml中的命名空间的引入                     &#...
  • u011555996
  • u011555996
  • 2017-06-09 10:55
  • 403

xml 序列化时, 去掉默认的命名空间

C# 的 xml 序列化时,文档总会带有xmlns:xsd="http://www.w3.org/2001/XMLSchema"andxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"如果想去掉,或者添加...
  • laorer
  • laorer
  • 2009-03-11 17:25
  • 5790

namespace和里面的类不能同名

类和他所在的命名空间不能同名,如果同名虽然编译包括生成dll都没有问题,但是当别的地方引用这个命名空间时,不能直接引用这个同名类,在编辑器里输入类名时不会自动显示这个类,只能找到namespace ,
  • bixued
  • bixued
  • 2017-12-22 16:00
  • 39

关于xml命名空间的——xmlns:f="http://www.name.com.cn/sub",一些疑问

在《flash ActionScript 3 殿堂之路》page132,page133,有以下这段话,可以解决一些疑问      page132     namespace类对象只有两个属性:prefix和uri。prefix...
  • luguo0816
  • luguo0816
  • 2011-10-31 16:17
  • 1288

.NET(C#):使用XPath查询带有命名空间(有xmlns)的XML

众所周知,XmlDocument可以进行XPath查询,但实际上这里所说的XPath查询仅限于没有命名空间(没有xmlns属性)的XML,一旦遇到有命名空间的XML,对应XPath查询都会无结果。 比如下面这个XML a xmlns="mgen.cnblogs.com...
  • yw1688
  • yw1688
  • 2013-07-09 14:11
  • 827

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

一、什么是命名空间         XAML 命名空间实际上是 XML 命名空间概念的扩展。 指定 XAML 命名空间的技术依赖于 XML 命名空间语法、使用 URI 作为命名空间标识符的约定、使用前缀提供从同一标记源中引用多个...
  • qq_27825451
  • qq_27825451
  • 2017-03-28 17:56
  • 532

关于XML Schema命名空间中已经有xmlns却还要targetnamespace的理解

最近在学习XML Schema,没法很好的分清命名空间的xmlns、targetnamespace的区别,为什么在已经有全局命名空间xmlns和定义的命名空间xmlns:prefix后还要加入一个targetnamespace。上StackoverFlow找到一些解释,现在拿出来分享一下。 为什么要...
  • Ruizhe_Hao
  • Ruizhe_Hao
  • 2016-12-02 10:56
  • 2196
    个人资料
    • 访问:206173次
    • 积分:2788
    • 等级:
    • 排名:第14688名
    • 原创:90篇
    • 转载:18篇
    • 译文:1篇
    • 评论:36条
    文章分类
    最新评论