WPF命名空间混乱

时间:2012-09-13 07:47:47

标签: c# wpf xaml namespaces

我需要从WPF窗口访问两个clrnamespaces,它们名称冲突

xmlns:ns1="clr-namespace:Namespace1.Namespace2.Namespace3.Namespace4;assembly="
xmlns:ns2="clr-namespace:Namespace2;assembly=Namespace2"

当我去使用Namespace2中的任何内容时,例如

<Canvas>
  <ns2:MyControl ... />
</Canvas>

我收到以下编译错误

The type or namespace name 'MyControl' does not exist in the namespace 'Namespace1.Namespace2' (are you missing an assembly reference?)

我知道命名空间的命名不是很好,但改变前者需要远离系统中其他地方使用的结构,而改变后者需要更改系统的其他部分。

有没有人对此有何建议?

1 个答案:

答案 0 :(得分:1)

如果使用“xmlns:”找不到解决方案,那么可以考虑使用XmlnsDefinition将多个clrnamespace映射到由URI标识的XML命名空间,然后使用该URI来引用该组clr名称空间。

XmlnsDefinition放入包含您要分组的CLR类型的每个程序集的AssemblyInfo.cs

[XmlnsDefinition("http://www.mycompany.com/appname", "Namespace1.Namespace2.Namespace3.Namespace4")]

[XmlnsDefinition("http://www.mycompany.com/appname", "Namespace2")]

然后在你的XAML中你可以做到:

xmlns:ns="http://www.mycompany.com/appname"

然后它应该允许您使用公共前缀访问类型。


另一方面,您可能忘记在项目中添加对Namespace2 DLL的引用?

如果以上都不起作用,您能否更多地描述您的项目结构,例如你可以显示MyControl代码......它所在的位置......还可以显示代码的命名空间语句。