問題是這樣的,代碼段如下
<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">
我設(shè)置了IsChecked為true,那么程序啟動時就要執(zhí)行
RadioButton_Checked這個事件,這個事件如下
1 private void RadioButton_Checked(object sender, RoutedEventArgs e)
2 {
3
4 myButton.RenderTransformOrigin = p;
5 }
那么,這個程序是要報錯的,出錯顯示myButton為空,為什么會這樣?是因為這樣mybutton沒初始出來?用winform測試了一下,沒有這種問題,但是,winfrom貌似一開始不執(zhí)行
RadioButton_CheckedChanged這個事件?這是wpf的bug么?后來再研究了下,發(fā)現(xiàn)這樣是可以避免mybutton為空這種錯誤的在構(gòu)造函數(shù)里來設(shè)置IsChecked屬性
public MainWindow()
{
this.InitializeComponent();
// 在此點下面插入創(chuàng)建對象所需的代碼。
RadioA.IsChecked = true;
}
同樣,winform里面這樣設(shè)置,程序執(zhí)行的時候,它又執(zhí)行了
RadioButton_CheckedChanged這個事件。徹底暈了,哪位朋友幫我想想,wpf里面,IsChecked那樣設(shè)置為什么就要報錯,謝謝啦
?
1 回答

森欄
TA貢獻1810條經(jīng)驗 獲得超5個贊
兩點:
1.WPF窗體的初始化事件里會執(zhí)行所有控件的初始化
2.WPF里的屬性觸發(fā)器不等同于winform的事件監(jiān)控機制.也就是即使沒有用戶點擊或鉤選等操作,屬性修改就會觸發(fā)Checked等事件.
所以,在初始化RadioButton控件時,會設(shè)置IsChecked屬性,于是觸發(fā)了Checked事件,而此時另一個控件尚未初始化,所以對其的引用當(dāng)然會報錯.
- 1 回答
- 0 關(guān)注
- 1503 瀏覽
添加回答
舉報
0/150
提交
取消