开发 WPF 程序的过程中,在编写 xaml 的页面中看到框架内很多默认命名空间都是用一段网址...
复制这些网址在浏览器中,并不是都可以直接访问!那这些网址如何定义,为何可以用来表示命名空间?
寻找定义
我们以 MaterialDesignInXamlToolkit 的为例,看到这个控件库的 AssemblyInfo 文件中有如下代码:
[assembly: XmlnsPrefix("http://materialdesigninxaml.net/winfx/xaml/themes", "materialDesign")]
[assembly: XmlnsDefinition("http://materialdesigninxaml.net/winfx/xaml/themes", "MaterialDesignThemes.Wpf")]
[assembly: XmlnsDefinition("http://materialdesigninxaml.net/winfx/xaml/themes", "MaterialDesignThemes.Wpf.Transitions")]
[assembly: XmlnsDefinition("http://materialdesigninxaml.net/winfx/xaml/themes", "MaterialDesignThemes.Wpf.Converters")]
其中所包含的网址,不正是我们使用控件时所声明的命名空间,如:
xmlns:MaterialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
通过声明如上的一条网址,便可以直接调用
MaterialDesignThemes.Wpf
MaterialDesignThemes.Wpf.Transitions
MaterialDesignThemes.Wpf.Converters
三个命名空间中的类库方法,真是神奇!
如何让自己的控件库也可以使用网址来声明
1.创建一个控件类库
打开 AssemblyInfo.cs 文件,写入代码如:
[assembly: XmlnsPrefix("http://www.zdyla.com/coding", "ZDY")]
[assembly: XmlnsDefinition("http://www.zdyla.com/coding", "ZDY.LovePlayer.Control")]
其中:
XmlnsDefinition 便是网址和命名空间对应关系的定义方法
XmlnsPrefix 则是定义声明命名空间时的默认前缀,默认前缀可以在调用时被任意修改,不用太多纠结
2.创建一个 WPF 测试程序
引入自己的控件库,在命名空间中尝试声明:
xmlns:ZDY="http://www.zdyla.com/coding"
便可以在 xaml 中调用,示例代码:
<ZDY:IconTextBlock Icon="Heart" Text="爱你"/>
关于对网址形式的命名空间的理解
网址形式的命名空间等价于传统形式的命名空间,而且还可以以一对多的关系来定义
而网址一般为开发者所在公司的网址,或者个人网址...