开发 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="爱你"/>

关于对网址形式的命名空间的理解

网址形式的命名空间等价于传统形式的命名空间,而且还可以以一对多的关系来定义

而网址一般为开发者所在公司的网址,或者个人网址...

All Comments

Leave a Reply Cancel Reply

Tips: Your email address will not be disclosed!

If you can't see clearly,please click to change...