2011-07-25 35 views
2

我有一個Ribbon CheckBoxRibbon 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

對不起,這已經很簡單了 - 複選框和單選按鈕。我絕對看不出爲什麼它會拋出我一個例外。可能是功能區控制中的錯誤? – KMC

+0

在你的構造函數中,應該調用'InitializeComponents'。請確認在調用之後'radioButton1'是非空的。 –

回答

3

隨着您的控件加載,首先創建CheckBox,然後創建RadioButton。事件可能早於radioButton1的設置。您可以通過暫時從XAML中刪除IsChecked = true來驗證。

一對夫婦的選擇這裏:

  1. 數據綁定 - 使用物業器isChecked無需代碼自動更新您的單選按鈕。你需要命名你的複選框。

    的IsEnabled = 「{結合器isChecked,的ElementName = checkBox1,模式=單向}」

  2. 檢查空在現有的代碼 -

    如果(radioButton1!= NULL){ radioButton1.IsEnabled = false; }

  3. Loaded事件完成後更新了您的radioButton狀態。

    private bool isLoaded;

    保護覆蓋OnLoaded(...) { this.isLoaded = true; }

    私人無效CheckBox1_Checked(對象發件人,RoutedEventArgs E) { 如果(this.isLoaded) { radioButton1.IsEnabled = FALSE; //這是在拋出異常 } }

的優選方法通常是#1。