【C#】wpf中的xmlns命名空间为什么是一个网址,代表了什么意思
新建一个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多行,节约手工代码量。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【C#】WindowsAPICodePack-Shell使用教程
原文: 【C#】WindowsAPICodePack-Shell使用教程 1.首先在项目中添加WindowsAPICodePack的Nuget包。 点击安装即可。 2.获取《我的电脑》的名字和电脑图标 ShellObject so = ShellFileSystemFolder.FromParsingName(KnownFolders.Computer.ParsingName); displayName = so.Name; Bitmap bm = so.Thumbnail.SmallBitmap; bm.MakeTransparent(System.Drawing.Color.Black); 其中,so.Name就是“我的电脑”的名字,注意不是机器名哦,机器名可以直接通过Environment.MachineName获取。 电脑图标可以通过so的Thumbnail获取,可以获得SmallBitmap,Bitmap,LargeBitmap,SmallIco,Ico,LargeIco等。不过由于获取到的Bitmap的背景色由之前的透明色变成了黑色,可以是因为api的原因,所以需要我们用...
- 下一篇
【C#】wpf查找父子节点
原文: 【C#】wpf查找父子节点 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Media; namespace TestSeagate.Common { class UIAssociate { /// <summary> /// 查找第一个父节点是T类型的节点,并返回。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dobj"></param> /// <returns></returns> public static T GetAncestor<T>(DependencyObject dobj) where T : ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池