【问题标题】:XAML- creating an instance of a classXAML——创建一个类的实例
【发布时间】: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">

到文件顶部,然后去掉&lt;TabControl&gt;标签中xmlns的使用,并尝试通过local创建类的实例:

<TabControl>
    ...
    <TabItem Header="BClass">
        <StackPanel>
            <local:BClass x:Name="BClass" />
        </StackPanel>
    </TabItem>
</TabControl>

但是,我现在在尝试实例化 BClass 的行上遇到编译错误:

<local:BClass x:Name="BClass" />

上面写着:

“BClass”类型的值不能添加到“UIElementCollection”类型的集合或字典中。

我尝试删除 &lt;StackPanel&gt;&lt;/StackPanel&gt; 标记,虽然这删除了上面的编译错误,但它给我留下了一个说:

名称“BClass”不存在于命名空间“clr-namespace:RAgent”中——正如BClass的定义所示,它显然存在...

有谁知道我该如何解决这个问题?

【问题讨论】:

  • 您是否尝试为此声明添加x:Key?所以代码应该看起来像这样&lt;agent:BClass x:Key="testObject" /&gt;。或者partial关键字可能有问题。
  • 我刚刚试了一下,但仍然得到相同的编译错误,现在也得到一个写着A value of type 'BClass' cannot be added to a collection or dictionary of type 'UIElementCollection'的错误
  • xmlns:agent="clr-namespace:RAgent" 也许吧?
  • 这就是我所拥有的...&lt;TabControl xmlns:agent="clr-namespace:RAgent"&gt;,然后在&lt;TabItem&gt;&lt;StackPanel&gt; 中,我放了&lt;agent:RBrowser/&gt;,结束标签如下:&lt;/StackPanel&gt;&lt;/TabItem&gt;
  • 我编辑了我的 OP 以展示我是如何尝试解决此问题的,以及我现在尝试创建 BClass 实例时遇到的问题...

标签: c# wpf xaml build-error


【解决方案1】:

我建议您在 MainApp 中创建 TabControl,然后在项目中将每个 TabItem 作为 UserControl。然后,您可以通过执行以下操作轻松地在相应选项卡中实例化您的类 &lt;local:BClass x:Name="BClass"/&gt;

检查Tabs in different XAML viewsHow to create and use an instance of a class in XAML 以获得更好的理解

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 2011-05-15
    • 2023-03-31
    • 2012-08-24
    • 1970-01-01
    相关资源
    最近更新 更多