【发布时间】:2016-05-05 10:06:58
【问题描述】:
我正在尝试从我的应用程序的 XAML 标记中创建 C# 类的实例。
我正在尝试在 <StackPanel></StackPanel> 标记内使用 C# 类的实例,在我已嵌套在 <TabControl></TabControl> 标记中的 <TabItem></TabItem> 标记内,我声明了 C# 类所属的命名空间:
<TabControl xmlns:agent="RAgent">
<TabItem Header="R">
<StackPanel>
...
</StackPanel>
</TabItem>
<TabItem Header = "BClass">
<StackPanel>
<agent:BClass />
</StackPanel>
</TabItem>
</TabControl>
C# 类 BClass 定义为:
namespace RAgent{
public partial class BClass : UserControl{
public BClass(){
...
}
...
}
}
我知道 C# 代码可以正确编译和运行,因为我之前已将它与应用程序的其余部分分开运行。但是,当我目前尝试构建我的代码时,我在 XAML 中收到了一个编译错误,如下所示:
<agent:BClass />
上面写着:
命名空间“RAgent”中不存在名称“BClass”
但是BClass 显然确实存在于命名空间RAgent 中,因为我已经在BClass.cs 文件的顶部用namespace RAgent{ 声明了命名空间...
我在这里做错了什么?我是否试图从 XAML 文件中错误地实例化 BClass?我该怎么做?
编辑
好的,所以我根据How to create instance of class in XAML? 的答案以及我从各个地方收集到的其他信息,稍微编辑了我的.xaml 文件。
我已经添加了这一行:
xmlns:local="clr-namespace:RAgent">
到文件顶部,然后去掉<TabControl>标签中xmlns的使用,并尝试通过local创建类的实例:
<TabControl>
...
<TabItem Header="BClass">
<StackPanel>
<local:BClass x:Name="BClass" />
</StackPanel>
</TabItem>
</TabControl>
但是,我现在在尝试实例化 BClass 的行上遇到编译错误:
<local:BClass x:Name="BClass" />
上面写着:
“BClass”类型的值不能添加到“UIElementCollection”类型的集合或字典中。
我尝试删除 <StackPanel></StackPanel> 标记,虽然这删除了上面的编译错误,但它给我留下了一个说:
名称“BClass”不存在于命名空间“clr-namespace:RAgent”中——正如
BClass的定义所示,它显然存在...
有谁知道我该如何解决这个问题?
【问题讨论】:
-
您是否尝试为此声明添加
x:Key?所以代码应该看起来像这样<agent:BClass x:Key="testObject" />。或者partial关键字可能有问题。 -
我刚刚试了一下,但仍然得到相同的编译错误,现在也得到一个写着
A value of type 'BClass' cannot be added to a collection or dictionary of type 'UIElementCollection'的错误 -
xmlns:agent="
clr-namespace:RAgent" 也许吧? -
这就是我所拥有的...
<TabControl xmlns:agent="clr-namespace:RAgent">,然后在<TabItem><StackPanel>中,我放了<agent:RBrowser/>,结束标签如下:</StackPanel></TabItem> -
我编辑了我的 OP 以展示我是如何尝试解决此问题的,以及我现在尝试创建
BClass实例时遇到的问题...
标签: c# wpf xaml build-error