0

我有两个单选按钮,如果我将属性IsChecked放在 XAML 中,程序会因 System.NullReferenceException 而崩溃。附加信息:对象引用未设置为对象的实例。

我的单选按钮:

<RadioButton IsChecked="True" Name="Mint" Checked="Mint_Checked_1"
  Foreground="Red"  FlowDirection="RightToLeft"  VerticalAlignment="Top"
  HorizontalAlignment="Right"  Margin="10,30,10,0" GroupName="Update_When"
  Content="A">
</RadioButton>

<RadioButton IsChecked="False" Name="Changet" Checked="Changet_Checked_1"
  FlowDirection="RightToLeft" VerticalAlignment="Top" HorizontalAlignment="Right"
  Margin="10,53,10,0" GroupName="Update_When" Content="B">
</RadioButton>

我的事件代码:

private void Mint_Checked_1(object sender, RoutedEventArgs e)
    {
        Mint.Foreground = Brushes.Red;
        Changet.Foreground = Brushes.Black;
    }

    private void Changet_Checked_1(object sender, RoutedEventArgs e)
    {
        Mint.Foreground = Brushes.Black;
        Changet.Foreground = Brushes.Red;
    }
4

2 回答 2

3

您收到该异常是因为您在元素初始化之前调用了已检查的事件,解决此问题的一种方法是将 移动IsChecked=True到 Loaded 事件:

private void MyWindow_Loaded (object sender, RoutedEventArgs e)
{
  Mint.IsChecked = true;
}
于 2012-07-25T18:19:07.363 回答
1

这对我有用,我将要检查的 RadioButton 的 xaml 行移到序列中的最后一行,如下所示:

XAML 文件中的原始顺序,(此顺序导致抛出异常)

RadioButton x:Name="RadioButton1"
RadioButton x:Name="RadioButton2" // Radio button that is initialized as selected (Is_Checked)
RadioButton x:Name="RadioButton3"
RadioButton x:Name="RadioButton4"

没有例外:

RadioButton x:Name="RadioButton1"
RadioButton x:Name="RadioButton3"
RadioButton x:Name="RadioButton4"
RadioButton x:Name="RadioButton2" // Radio button that is initialized as selected (checked)

我相信这是因为当单选按钮更改为“Is_checked”时(即使在初始化时),它也会调用它所绑定的 RadioButton_IsChecked 方法。

因此,在初始化期间,RadioButton1 被初始化为 false,然后 RadioButton2 被初始化为 true,这调用了绑定方法,并且 RadioButton3 和 RadioButton4 仍未初始化并且为 null 导致异常。

请注意,上述内容不会更改单选按钮在表单上的位置。

此外,我已将所有 4 个单选按钮绑定到相同的方法,并使用 if/else if/else if/else 来设置我在检查按钮时想要的表单属性。

于 2014-11-17T23:05:03.833 回答