C#WPF:将自定义Usercontrol添加到Stackpanel

时间:2014-03-01 15:04:15

标签: c# wpf listbox stackpanel

我尝试了一些关于将我自己创建的用户控件元素添加到listbox或stackpanel的事情,但是没有取得任何成功,它会导致 NullReferenceException ,我不知道为什么......

我的用户控件看起来像这样:

public partial class ShiftInformationItem : UserControl
{
    public ShiftInformationItem()
    {
        InitializeComponent();
    }
}

和xaml:

<Grid>
    <LabelContent="Benutzername:" />
    <Label Content="01.03.2014 14:19" />
    <TextBox Text="Eintrag ..." />
    <Expander Header="Comments (0)">
        <Grid Background="#FFE5E5E5"/>
    </Expander>
</Grid>

在主窗口中,我可以将它添加到列表框或堆栈面板中而不会出现任何问题:

<ListBox>
     <controls:ShiftInformationItem  />
</ListBox>

或:

<StackPanel Name="ShiftInformationPanel">
     <controls:ShiftInformationItem  />
</StackPanel>

但是当我尝试用C#添加它时:

ShiftInformationList.Items.Add(new ShiftInformationItem());
ShiftInformationPanel.Children.Add(new ShiftInformationItem());

它会导致 NullReferenceException ,并说我要添加的对象为null。

有人可以解释我为什么吗?

我非常感谢所有预先准备好的和有用的答案!

更新:

public partial class HoBusReceptionMain : Window
{
    public HoBusReceptionMain()
    {
        InitializeComponent();
    }

    private void RibbonWin_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        RibbonTab r = (RibbonTab)e.AddedItems[0];
        switch (r.Header.ToString())
        {
            case "Shift Information":
                InitializeShiftInformationTab();
                break;
            default:
                MessageBox.Show(e.AddedItems[0].ToString());
                break;
        }
    }

    private void InitializeShiftInformationTab()
    {
        //here I want to add the new ShiftInformationItem
    }

}

更新2:

感谢所有评论,它显示了我的列表|| Panel为null ...但两者都包含在主窗口中(在HoBusReceptionMain之上)

我在我的应用程序中使用了Ribbon,当选择或加载功能区选项卡时, RibbonWin_SelectionChanged 事件被触发...功能区定义下面定义的列表或面板

1 个答案:

答案 0 :(得分:2)

我怀疑你在调用InitializeComponent()之前添加了它。

移动在InitializeComponent()下面添加的代码,它将像在XAML中一样工作。问题是控件在调用InitializeComponent()之前未初始化,因此导致NullReferenceException

public MainWindow()
{
    InitializeComponent();
    ShiftInformationList.Items.Add(new ShiftInformationItem());
    ShiftInformationPanel.Children.Add(new ShiftInformationItem());
    // ShiftInformationPanel is null here
}