在显示的最后一行:
// 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>
为什么会出错?
答案 0 :(得分:4)
grd
不为空。
spNufan
或spNufan.Children
是。在XAML中定义名称时,您应该使用x:Name
而不是Name
:
<StackPanel x:Name="spNufan" Orientation="Vertical"></StackPanel>
答案 1 :(得分:3)
似乎在网格内抛出了空引用异常。 我猜网格要求实例化行定义。 (如果你在跳过的部分代码中实例化RowDefinitions,请原谅我是队长) 如果这不是尝试检查堆栈跟踪的原因。
答案 2 :(得分:1)
我会说你的代码非常好,但是,在我看来,你执行之前实际XAML
内容已加载并初始化,所以我假设你的
spnuFan is Null
导致代码按原样提供,对我来说似乎完全有效。因此,请考虑将其移动到应用的不同位置。
我建议通过添加一个按钮来检查这一点,并在Click
事件上执行该堆栈填充代码。
希望这有帮助。