向xaml添加自定义命名空间

时间:2010-07-21 09:00:05

标签: wpf xaml namespaces

我对C#,WPF和XAML很新,所以我可能无法使用正确的术语来提出正确的问题=) 我正在尝试将自己的命名空间添加到我的xaml文件中,以便轻松使用我自己的类 - 我猜其原因是 - 我在window标签中写了以下代码:

xmlns:myns="clr-namespace:LibNameSpace" 

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

< Window x:Class="LibNameSpace.MainWindow"

我想使用LibNameSpace:Class1类,我希望为此编写myns:Class1。但是,该命令会导致此错误:

  

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

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:28)

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

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

<强>更新

程序集的名称可以在project-explorer中找到项目的propeties屏幕(库程序集)。通常,没有dll - 后缀的dll的文件名也代表程序集名称。

答案 1 :(得分:10)

因为对我来说,你想要做什么并不是很清楚,这是另一个尝试:

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

  • 确保在Class1中没有 错误,项目必须 编译没有错误。首先删除 来自xaml的namespace-declaration并编译你的 项目,直到你没有编译错误。
  • 确保Class1是公开的 有一个无参数的构造函数
  • 确保在后面的代码中 你的MainWindow也在 MyLibAssembly - 。namcespace
  • 然后添加namspace-declaration xmlns:local="clr-namespace:LibNameSpace 进入你的xaml。一般来说local 用于声明与当前元素相同的命名空间,在您的情况下,窗口位于。
  • 插入您的Class1 xaml中的<local:Class1/> -tag。如果Class1不是派生自FrameworkElement或更高级别的控件,则必须将其添加到窗口的resources-section中。如果是这样,请给它一把钥匙。 <local:Class1 x:Key="KeyToYourClass"/>

也许vs不同步。单击根节点清理解决方案上的解决方案资源管理器,然后单击重建解决方案。也许这有帮助。

我希望这有帮助。如果没有,请尝试重新格式化您的问题(使用代码符号使问题更具可读性,并尝试重新措辞以更清楚地表达您的愿望)。

答案 2 :(得分:6)

使用Intellisense。就我而言,一个空间很重要。而不是

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

我手打字

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

注意';'之后的空格。这产生了不同。因此,使用visual studio Intellisense,它将为您呈现正确的xaml标记。

答案 3 :(得分:4)

当我在Windows 8中遇到问题时,我找到了这个答案。我试图使用用户控件,但我遇到了一些错误。最后一个:

  

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

  

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

ScrollControl是我的用户控件。

我最终取代了这个:

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

为此:

xmlns:Controls="using:EventTests.Controls"

我希望这可以节省我在这个问题上花费的时间。