TabControl控制項的TabItem的Content元素,例如:DataGrid控制項,在對事件的處理時,需要對事件的源引起關註,當需要處理DataGrid的事件時,事件會傳遞到TabControl中,解決這種問題的方法如下: 方法一:判斷觸發此事件的源是誰,根據事件的源再做相應處理 方法二:註冊 ...
TabControl控制項的TabItem的Content元素,例如:DataGrid控制項,在對事件的處理時,需要對事件的源引起關註,當需要處理DataGrid的事件時,事件會傳遞到TabControl中,解決這種問題的方法如下:
方法一:判斷觸發此事件的源是誰,根據事件的源再做相應處理
private void tabControl_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (e.Source is TabControl) { //do something } }
方法二:註冊DataGrid等相應控制項的相應事件,使其不再向上傳遞
private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { e.Handled = true; }
引發問題擴展: 無法動態設置當前項。。
例如: 如果在需要使用TabItem的內容元素DataGrid的雙擊事件時,
void dataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e) { //do something }
如果沒有加上e.Handled = true; 這句, 而此時恰恰我們需要動態改變TabControl的選擇項時,我們會面對這樣一個問題,無論我們怎麼改變下麵這個值,它的值總會變為我們處理雙擊事件時的Item頁面中。
this.tabControl.SelectedItem = newTabItem;