問題 §
静的にXAMLファイルに書き込んだXAMLのコントロールへのアクセスが例外になる。具体的に以下のコードが例外を起こして実行できない。
XAMLコード(抜粋) §
<CheckBox x:Name="TheCheck" IsChecked="True" Checked="TheCheck_Checked" Content="Test Check"></CheckBox>
<TextBlock x:Name="TheText"></TextBlock>
C#コード(抜粋) §
private void TheCheck_Checked(object sender, RoutedEventArgs e)
{
TheText.Text = "Done";
}
原因 §
初期化が完了する前にIsCheckedがTrueになるが、その時にCheckedイベントが発生してイベントハンドラが走る。その時、TextBlockはまだコントロールが作成されておらず、メンバーTextBlockはnull値である。
対策 §
静的にXAMLコードに書かれたコントロールであろうともnull参照になる可能性があると理解してコードを書く。