我创建了一个自定义用户控件(JCUserControl),我在主窗口中使用它。而我的主窗口没有代码隐藏。
我在JCUserControl代码隐藏中有这个:
Private Sub ImmediateRadioButton_Checked(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles ImmediateRadioButton.Checked
SomeTextBox.IsEnabled = False
End Sub
当我运行它时,它会因NullReferenceException而失败。如果我注释掉SomeTextBox.IsEnabled = false,它会毫无问题地运行。
有人可以帮忙吗?
编辑:
发现我可以在做任何我想做的事情之前检查单选按钮是否已加载。
Private Sub ImmediateRadioButton_Checked(sender As System.Object,e As System.Windows.RoutedEventArgs)处理ImmediateRadioButton.Checked
如果ImmediateRadioButton.IsLoaded那么 SomeTextBox.IsEnabled = False 万一 结束子
答案 0 :(得分:0)
不是很明显吗? SomeTextBox
是null
,这是可能的,因为并非所有控件都可以同时初始化,如果RadioButton
出现在解析顺序的前面,则其检查事件可以在{{1}之前触发退出。
无论如何,你应该更加公开地接受这个,例如: TextBox
TextBox.IsEnabled
RadioButton.IsChecked
或添加新的布尔属性并将其绑定到该属性。
e.g。对于前者:
<RadioButton Name="rb"/>
<!-- Apply Binding.Converter as needed, or use a DataTrigger instead -->
<TextBox IsEnabled="{Binding IsChecked, ElementName=rb}"/>