为什么实例化对象被视为不?

时间:2012-02-15 21:54:29

标签: c# .net wpf grid

在显示的最后一行:

// Dynamically add Grid with 8 columns to the StackPanel
Grid grd = new Grid();
ColumnDefinition c0 = new ColumnDefinition(); 
c0.Width = new GridLength(1, GridUnitType.Star); 
. . .
grd.ColumnDefinitions.Add(c0);
. . .
// Add it to the StackPanel
spNufan.Children.Add(grd); // <- ka-pow!

...我明白了,“ System.NullReferenceException未处理Message = Object引用未设置为对象的实例。

然而,“grd”是在行中创建的:

Grid grd = new Grid();

...和spNufan(一个StackPanel)在相应的xaml中:

<StackPanel Name="spNufan"
            Orientation="Vertical">
</StackPanel>

为什么会出错?

3 个答案:

答案 0 :(得分:4)

grd不为空。

spNufanspNufan.Children是。在XAML中定义名称时,您应该使用x:Name而不是Name

<StackPanel x:Name="spNufan" Orientation="Vertical"></StackPanel>

答案 1 :(得分:3)

似乎在网格内抛出了空引用异常。 我猜网格要求实例化行定义。 (如果你在跳过的部分代码中实例化RowDefinitions,请原谅我是队长) 如果这不是尝试检查堆栈跟踪的原因。

答案 2 :(得分:1)

我会说你的代码非常好,但是,在我看来,你执行之前实际XAML内容已加载并初始化,所以我假设

spnuFan is Null

导致代码按原样提供,对我来说似乎完全有效。因此,请考虑将其移动到应用的不同位置。

我建议通过添加一个按钮来检查这一点,并在Click事件上执行该堆栈填充代码。

希望这有帮助。