向xaml添加自定义命名空间

cem*_*ksu 12 wpf xaml namespaces

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

xmlns:myns="clr-namespace:LibNameSpace" 
Run Code Online (Sandbox Code Playgroud)

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

< Window x:Class="LibNameSpace.MainWindow"
Run Code Online (Sandbox Code Playgroud)

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

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

我怎样才能解决这个问题?

HCL*_*HCL 29

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

xmlns:myns="clr-namespace:LibNameSpace;assembly=MyLibAssembly
Run Code Online (Sandbox Code Playgroud)

更新:

程序集的名称可以在项目(项目库 - 程序集)的propeties屏幕中的项目资源管理器中找到.通常,没有dll-suffix 的dll的文件名也表示程序集名称.


HCL*_*HCL 10

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

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

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

也许vs不同步.单击根节点Clean Solution上的solution-explorer ,然后单击Rebuild Solution.也许这有帮助.

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

  • +1表示重建的建议.我对这种持续的波浪形变得非常沮丧. (2认同)

小智 6

使用Intellisense.就我而言,一个空间很重要.代替

xmlns:local="clr-namespace:DataAccess;assembly=DataAccess"
Run Code Online (Sandbox Code Playgroud)

我打字了

xmlns:local="clr-namespace:DataAccess; assembly=DataAccess"
Run Code Online (Sandbox Code Playgroud)

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


Tia*_*ida 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"
Run Code Online (Sandbox Code Playgroud)

为了这:

xmlns:Controls="using:EventTests.Controls"
Run Code Online (Sandbox Code Playgroud)

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