2012-02-15 18 views
0

インスタンス化されたオブジェクトが表示されないのはなぜですか?最後の行に示さオン

// 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は、オブジェクトのインスタンスに設定されていない未処理メッセージ=オブジェクト参照ました。"

それでも「GRD

Grid grd = new Grid(); 

...とspNufan(のStackPanel)は、対応するXAMLである: "行で作成され

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

なぜエラーが発生しますか?

+1

その行にブレークポイントを設定します。順番に各オブジェクト(プロパティを含む)にカーソルを合わせます。どちらがヌルですか?それを修正する方法を参照してください。 –

+1

Debug.Assert(spNufan!= null)を追加するとどうなりますか。 Debug.Assert(spNufan.Children);その後、両方の例外をスローする前に? – dgvid

+0

どこで(いつ)このコードをすべて呼びますか? GUIがまだ作成されていないように見えます。 –

答えて

1

私はあなたのコードは完全に罰金だと言うだろうが、私の意見では、あなたがそれを実行したコンテンツがロードされ、初期化され実際XAML前に、私は原因そのご

spnuFan is Null 

を想定そのまま提供されているコードは、私には完全に正しいと思われます。だからあなたのアプリの別の場所で動くと考えてください。

これを確認するには、ボタンを追加して、ClickイベントのStack population codeを実行することをお勧めします。

これが役に立ちます。

4

grdはnullではありません。

またはspNufan.Childrenです。あなたのXAMLに名前を定義するときは、むしろNameよりx:Nameを使用する必要があります。

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

null参照の例外がグリッド内でスローされているようです。 グリッドでは、行定義をインスタンス化する必要があると思います。 (コードのスキップ部分でRowDefinitionsをインスタンス化している場合、私はキャプテンが明白であると私に言い訳します) これが理由でない場合は、スタックトレースをチェックしてみてください。