尝试禁用控件时抛出异常

时间:2011-07-25 08:55:46

标签: c# wpf

我有一个功能区CheckBox 和一个功能区RadioButton 。选中CheckBox后,RadioButton将被禁用并显示为灰色。这应该很容易(参见下面的代码),但是当程序编译时,它会一直出错:

“对象引用未设置为对象的实例。”

我不太明白。以下是我的代码:

<ribbon:RibbonCheckBox Unchecked="CheckBox1_Unchecked"
                       Checked="CheckBox1_Checked" IsChecked="True"
                       Label="Foo" />

<ribbon:RibbonRadioButton x:Name="radioButton1" Label="=Santa" />

private void CheckBox1_Checked(object sender, RoutedEventArgs e)
{
    radioButton1.IsEnabled = false;  // this is where exception is thrown
}

1 个答案:

答案 0 :(得分:3)

加载控件后,首先创建CheckBox,然后创建RadioButton。可能事件早于你的radioButton1被设置了。您可以通过暂时从XAML中删除IsChecked = true来验证这一点。

这里有几个选项:

  1. 数据绑定 - 使用IsChecked属性自动更新没有代码的单选按钮。您需要为复选框命名。

    IsEnabled =“{绑定IsChecked,ElementName = checkBox1,Mode = OneWay}”

  2. 检查现有代码中的null -

    if(radioButton1!= null) {     radioButton1.IsEnabled = false; }

  3. 在Loaded事件完成后更新了您的radioButton状态。

    private bool isLoaded;

    受保护的覆盖OnLoaded(...) {    this.isLoaded = true; }

    private void CheckBox1_Checked(对象发送者,RoutedEventArgs e) {   if(this.isLoaded)   {     radioButton1.IsEnabled = false; //这是抛出异常的地方   } }

  4. 首选方法通常是#1。