c# - WPF 命名空间混淆

标签 c# wpf xaml namespaces

我有两个需要从 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?)

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

有没有人对解决此问题的方法有任何建议?

最佳答案

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

放一个 XmlnsDefinitionAssemblyInfo.cs包含要分组的那些 CLR 类型的每个程序集。

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

[XmlnsDefinition("http://www.mycompany.com/appname", "Namespace2")]
  • http://www.global-webnet.net/blogengine/post/2010/06/20/WPF-assembly-XmlnsDefinition-identify-types-for-XAML-usage.aspx

  • 然后在您的 XAML 中,您可以执行以下操作:
    xmlns:ns="http://www.mycompany.com/appname"
    

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

    另一方面,也许您忘记向项目添加对 Namespace2 DLL 的引用?

    如果上述方法均无效,您能否多描述一下您的项目结构,例如您能否显示 MyControl 代码...它所在的位置...并显示代码的命名空间语句。

    关于c# - WPF 命名空间混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12401700/

    相关文章:

    c# - 我如何在另一个 ItemsControl 中绑定(bind)父 ItemsControl?

    c# - 如何在代码隐藏中将 FrameworkElement.Width 属性设置为 qualifiedDouble 的值?

    c# - 是否有一个很好的工具可以从 XAML 中查找对属性的引用?

    c# - 如何为 C# 中的按钮提供新位置?

    c# - 每个按钮单击的增量 C# Desktop

    c# - LINQ to SQL 与带有聚合函数的 group by 子句

    c# - onchange = "Form.submit() 仅适用于我的下拉菜单中的第一个子下拉菜单

    wpf - 如何在UI线程上执行冗长的任务期间强制执行UI更新

    c# - 如何将 queryString 值更改为 (int)

    C#WPF在按下键时移动矩形而没有短暂的延迟