我正在尝试从我的应用程序的XAML标记中创建C#类的实例。
我试图在<StackPanel></StackPanel>
标记内,嵌套在<TabItem></TabItem>
标记内的<TabControl></TabControl>
标记内使用C#类的实例,在该标记中我声明了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 />
其中说:
名称“ BClass”在名称空间“ RAgent”中不存在
但是
BClass
显然存在于命名空间RAgent
中,因为我已经用BClass.cs
在namespace RAgent{
文件的顶部声明了命名空间。我在这里做错了什么?我是否尝试从XAML文件中错误地实例化
BClass
?我应该怎么做?编辑
好的,因此我根据How to create instance of class in XAML?的答案以及从不同地方获得的其他信息对我的
.xaml
文件进行了一些编辑。我添加了以下行:
xmlns:local="clr-namespace:RAgent">
到文件顶部,然后在
xmlns
标记中删除对<TabControl>
的使用,并尝试通过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
的定义所示。有人知道我该如何解决?
最佳答案
我建议您在MainApp中创建TabControl
,然后在项目中将每个TabItem
作为UserControl
创建。然后,您可以通过执行以下操作轻松地在相应的选项卡中实例化您的类<local:BClass x:Name="BClass"/>
检查Tabs in different XAML views和How to create and use an instance of a class in XAML以获得更好的理解