为了账号安全,请及时绑定邮箱和手机立即绑定

WPF RadioButton&CheckBox 的IsChecked属性问题

WPF RadioButton&CheckBox 的IsChecked属性问题

慕村225694 2018-12-07 00:08:39
问题是这样的,代码段如下 <RadioButton Name="RadioA" GroupName="hello" Canvas.Top="0" Canvas.Left="0" Checked="RadioButton_Checked" DataContext="0,0" IsChecked="True">(0,0)</RadioButton> <Button Name="myButton" Canvas.Left="100" Canvas.Top="100" Width="100" Height="70" Click="myButton_Click"> 我设置了IsChecked为true,那么程序启动时就要执行 RadioButton_Checked这个事件,这个事件如下 1 private void RadioButton_Checked(object sender, RoutedEventArgs e) 2 { 3 4 myButton.RenderTransformOrigin = p; 5 } 那么,这个程序是要报错的,出错显示myButton为空,为什么会这样?是因为这样mybutton没初始出来?用winform测试了一下,没有这种问题,但是,winfrom貌似一开始不执行 RadioButton_CheckedChanged这个事件?这是wpf的bug么?后来再研究了下,发现这样是可以避免mybutton为空这种错误的在构造函数里来设置IsChecked属性 public MainWindow() { this.InitializeComponent(); // 在此点下面插入创建对象所需的代码。 RadioA.IsChecked = true; } 同样,winform里面这样设置,程序执行的时候,它又执行了 RadioButton_CheckedChanged这个事件。彻底晕了,哪位朋友帮我想想,wpf里面,IsChecked那样设置为什么就要报错,谢谢啦  
查看完整描述

1 回答

?
森栏

TA贡献1810条经验 获得超5个赞

两点:

1.WPF窗体的初始化事件里会执行所有控件的初始化

2.WPF里的属性触发器不等同于winform的事件监控机制.也就是即使没有用户点击或钩选等操作,属性修改就会触发Checked等事件.

所以,在初始化RadioButton控件时,会设置IsChecked属性,于是触发了Checked事件,而此时另一个控件尚未初始化,所以对其的引用当然会报错.

查看完整回答
反对 回复 2019-01-21
  • 1 回答
  • 0 关注
  • 1467 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信