1

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

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?)

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

有没有人对如何解决这个问题有任何建议?

4

1 回答 1

1

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

在每个包含要分组的 CLR 类型的程序XmlnsDefinition集中放入一个。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 代码...它所在的位置...并显示代码的命名空间语句。

于 2012-09-13T09:32:15.620 回答