我有一个功能区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
}
答案 0 :(得分:3)
加载控件后,首先创建CheckBox,然后创建RadioButton。可能事件早于你的radioButton1被设置了。您可以通过暂时从XAML中删除IsChecked = true来验证这一点。
这里有几个选项:
数据绑定 - 使用IsChecked属性自动更新没有代码的单选按钮。您需要为复选框命名。
IsEnabled =“{绑定IsChecked,ElementName = checkBox1,Mode = OneWay}”
检查现有代码中的null -
if(radioButton1!= null) { radioButton1.IsEnabled = false; }
在Loaded事件完成后更新了您的radioButton状态。
private bool isLoaded;
受保护的覆盖OnLoaded(...) { this.isLoaded = true; }
private void CheckBox1_Checked(对象发送者,RoutedEventArgs e) { if(this.isLoaded) { radioButton1.IsEnabled = false; //这是抛出异常的地方 } }
首选方法通常是#1。