首页 新闻 会员 周边

WPF RadioButton&CheckBox 的IsChecked属性问题

0
悬赏园豆:100 [已解决问题] 解决于 2012-07-03 21:29

问题是这样的,代码段如下

<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那样设置为什么就要报错,谢谢啦
 
UncleNull的主页 UncleNull | 初学一级 | 园豆:3
提问于:2012-07-03 13:56
< >
分享
最佳答案
2

两点:

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

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

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

收获园豆:100
ZhYong | 菜鸟二级 |园豆:328 | 2012-07-03 16:14

谢谢,现在更清楚了

UncleNull | 园豆:3 (初学一级) | 2012-07-03 21:29

厉害啊

黑白Ketty | 园豆:208 (菜鸟二级) | 2016-04-04 21:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册