XAML-创建类的实例

时间:2016-05-05 10:06:58

标签: c# wpf xaml build-error

我正在尝试从我的应用程序的XAML标记中创建一个C#类的实例。

我正在尝试在<StackPanel></StackPanel>标记内使用C#类的实例,我已嵌套在<TabItem></TabItem>标记中的<TabControl></TabControl>标记中我已声明了名称空间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 />

说:

  

名称&#34; BClass&#34;命名空间中不存在&#34; RAgent&#34;

但是BClass明显存在于命名空间RAgent中,因为我已使用BClass.csnamespace RAgent{文件的顶部声明了命名空间...

我在这里做错了什么?我是否尝试在XAML文件中错误地实例化BClass?我该怎么做?

修改

好的,所以我根据How to create instance of class in XAML?的答案,以及我从不同地方收集到的其他信息,对我的.xaml文件进行了一些编辑。< / p>

我添加了这一行:

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" />

说:

  

类型&#39; BClass&#39;无法添加到类型&#39; UIElementCollection&#39;的类型的集合或词典中。

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

  

名称&#34; BClass&#34;命名空间中不存在&#34; clr-namespace:RAgent&#34; - 它显然是这样做的,如BClass的定义所示......

任何人都知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

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

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