我有一个功能区复选框和一个功能区单选按钮。选中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
}

最佳答案

加载控件时,首先创建CheckBox,然后创建RadioButton。该事件可能在设置radioButton1之前就已挂起。您可以通过从XAML临时删除IsChecked = true来验证这一点。

这里有几个选择:


数据绑定-使用IsChecked属性自动更新您的单选按钮,而无需代码。您需要命名复选框。

IsEnabled =“ {绑定IsChecked,ElementName = checkBox1,Mode = OneWay}”
在现有代码中检查是否为空-

如果(radioButton1!= null)
{
    radioButton1.IsEnabled = false;
}
在Loaded事件完成后,更新了radioButton状态。

私人布尔isLoaded;

受保护的重写OnLoaded(...)
{
   this.isLoaded = true;
}

私有无效CheckBox1_Checked(对象发送者,RoutedEventArgs e)
{
  如果(this.isLoaded)
  {
    radioButton1.IsEnabled = false; //这是引发异常的地方
  }
}


首选方法通常是#1。

09-05 03:25