向XAML添加自定义命名空间

14

我想在我的xaml文件中添加自己的命名空间,以便轻松地使用自己的类 - 我猜原因是这样的 - 为此,我在窗口标记中编写了以下代码:

xmlns:myns="clr-namespace:LibNameSpace" 

我的窗口标签也以以下定义开头:

<Window x:Class="LibNameSpace.MainWindow"

我想使用LibNameSpace:Class1类,并希望将其写为myns:Class1,但是会引发以下错误:

未定义的CLR命名空间。'clr-namespace' URI指向未包含在程序集中的名称空间'LibNameSpace'。

我该如何解决这个问题?


请确保将库引用添加到应用程序项目中。 - patrick
4个回答

35

LibNameSpace这个名称听起来像是另一个程序集中的库。如果是这种情况,你必须添加程序集的名称:

xmlns:myns="clr-namespace:LibNameSpace;assembly=MyLibAssembly

更新:

程序集的名称可以在项目资源管理器中找到,在库程序集项目的属性屏幕中。通常,不带dll后缀的dll文件名也代表程序集名称。


其实,我确实在某个地方看到过这样的解决方案,但我不知道从哪里学习我的程序集名称... =) - cemregoksu
有其他的建议/想法/帮助吗? - cemregoksu
我担心当我写下 xmlns:myns="clr-namespace:LibNameSpace;assembly=LibNameSpace" 时它不起作用。 - cemregoksu
你的汇编文件名中是否包含空格?我猜你应该将空格替换为下划线。 - Ingó Vals
1
有趣的是,当我手写完整名称(例如“clr-namespace…”)时,它不起作用,但当我从智能感知列表中选择命名空间时,它就可以工作了...感谢您的帮助=) - cemregoksu

10

由于我不太清楚您想做什么,这里再尝试一下:

如果MyLibAssembly是您应用程序的主命名空间,在其中有一个名为MainWindow的窗口和一个名为Class1的类,您想在MainWindow类中实例化它:

  • 确保Class1中没有错误,项目必须无错误编译。首先从xaml中删除命名空间声明并编译项目,直到没有编译错误。
  • 确保Class1是公共的且具有无参数的构造函数。
  • 确保在MainWindow的代码后台中也在MyLibAssembly命名空间中。
  • 然后将命名空间声明xmlns:local="clr-namespace:LibNameSpace"添加到您的xaml中。local通常用于声明与当前元素(在您的情况下为窗口)相同的命名空间。
  • 使用<local:Class1/>标记在xaml中插入Class1。如果Class1未从FrameworkElement或更高级别的控件派生,则必须将其添加到窗口的资源部分。如果是这样,请给它一个键。<local:Class1 x:Key="KeyToYourClass"/>

可能vs不同步。在解决方案资源管理器中单击根节点Clean Solution,然后单击Rebuild Solution。也许会有所帮助。

希望这可以帮到您。如果没有,请尝试重新格式化您的问题(使用代码符号使问题更易读,并尝试重新表述以更清楚地说明您的需求)。


2
+1 建议重建。我对这个持续的波浪线感到非常沮丧。 - Grault
从UserControl.xaml开始,问题是删除标准文件:UserControl.xaml.cs\vb;然后在MyClass.cs\vb文件下发生,其中MyClassNamespace.MyClassControls.UserControlClass的工作方式类似于UserControl.xaml.cs\vb。 - H3sDW11e

6
使用智能感知功能。在我的情况下,一个空格很重要。而不是


xmlns:local="clr-namespace:DataAccess;assembly=DataAccess"

我手动输入了

xmlns:local="clr-namespace:DataAccess; assembly=DataAccess"

注意';'后面的空格。这点很重要。因此使用Visual Studio Intellisense,它会为您呈现正确的XAML标记。

尝试了很多不同的方法,最终这个方法成功了!如此简单。 - John

5
我在解决Windows 8的问题时发现了这个答案。我试图使用一个用户控件,但是出现了几个错误。最后两个错误是:

错误9:无法将'ScrollControl'添加到集合属性'Children'中,类型必须为'UIElement'

和:

错误10:XML命名空间'clr-namespace:EventTests.Controls;assembly=EventTests,Version =1.0.0.0,Culture=neutral,PublicKeyToken=null'中未知类型'ScrollControl'

ScrollControl是我的用户控件。

最终我将它替换为:

xmlns:Controls="clr-namespace:EventTests.Controls"

对于这个问题:

xmlns:Controls="using:EventTests.Controls"

我希望这篇翻译能够为您节省解决此问题的时间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接