在C#中有命名空间的概念,我们可以使用using引入,就可以使用其中的类,在xaml中,也同样有命名空间,在window标签中用xmlns声明的这几行,这就是本页面引入的命名空间。
一般的情况下,我们引入命名空间,都是为了使用其中的控件,或者使用一些类型转换器(TypeConverter,后续章节会讲)等工具类,所以为了区分我们使用的是哪个命名空间下的控件或类,我们必须要在引入命名空间的同时,指定它在本页面的别名,也就是xmlns冒号后的值,如上图中的“x”,“d”,"mc"等,我们使用的时候也要在标签前加上名字:<x:tag/>。 另外,我们看到上图中引入的命名空间是一个个http链接,但这并不是去访问了某个地址,而是xaml中的硬编码,当系统遇到这样的链接,就会去引用一堆命名空间,用一行引用代替了多行引用。再一个,一个页面可以有一个默认命名空间,也就是xmlns后没有别名,当我们使用的控件没有标明使用哪个命名空间时,系统会自动去默认命名空间中寻找,就像window,grid这样的控件,是由xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"都在这一行引入的命名空间中。 我们新建一个界面,命名空间默认就是以上这样的几行,但其实它引入了很多,单单http://schemas.microsoft.com/winfx/2006/xaml/presentation这一个声明就会引入如下一堆命名空间:
编译时
当我们运行时,系统会编译xaml代码,会将xaml编译为一个partial 类,类名就是window 标签第一行用x:Class指定的名称,也就是会跟我们的后台类合并,这一点还是跟WinForm一样的。 后台代码中的InitializeComponent()方法就是编译xaml后的部分类给的,作用是去初始化控件。