我尝试了一些关于将我自己创建的用户控件元素添加到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 事件被触发...功能区定义下面定义的列表或面板
答案 0 :(得分:2)
我怀疑你在调用InitializeComponent()
之前添加了它。
移动在InitializeComponent()下面添加的代码,它将像在XAML中一样工作。问题是控件在调用InitializeComponent()
之前未初始化,因此导致NullReferenceException
。
public MainWindow()
{
InitializeComponent();
ShiftInformationList.Items.Add(new ShiftInformationItem());
ShiftInformationPanel.Children.Add(new ShiftInformationItem());
// ShiftInformationPanel is null here
}