2013-11-22 75 views
0

我在TabItem中有一個ComboBox。 問題是,當我選擇任何ComoboxItem時,TabControl_SelectionChanged事件被觸發。並且我在該事件內部有一些函數,我不希望它在我更改ComboBox選定項目後執行。ComboBoxItem選擇觸發TabControl_SelectionChanged事件

<TabControl x:Name="tb" HorizontalAlignment="Left" Height="299" Margin="10,10,0,0" VerticalAlignment="Top" Width="497" SelectionChanged="TabControl_SelectionChanged"> 
      <TabItem x:Name="tbi1" Header="TabItem"> 
       <Grid Background="#FFE5E5E5"> 
        <Label x:Name="lbl" Content="Label" Margin="196,86,172,148"/> 
        <ComboBox HorizontalAlignment="Left" Margin="51,162,0,0" VerticalAlignment="Top" Width="120"> 
         <ComboBoxItem Content="ComboBoxItem"/> 
         <ComboBoxItem Content="ComboBoxItem"/> 
         <ComboBoxItem Content="ComboBoxItem"/> 
        </ComboBox> 
       </Grid> 
      </TabItem> 
      <TabItem x:Name="tbi2" Header="TabItem"> 
       <Grid Background="#FFE5E5E5"/> 
      </TabItem> 
     </TabControl> 

編輯: 此外,我面對徘徊在標籤項中的任何控制,因爲它遊動的TabItem過這個問題。

回答

3

在ComboBox的SelectionChanged事件中將e.Handled設置爲True。

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      e.Handled = true; 
     } 

的ComboBox和TabControl的是從選擇導出,SelectionChanged事件是路由事件,所以孩子的ComboBox」的SelectionChanged將被路由到父控件TabControl的。這是WPF路由事件行爲。路由的事件氣泡路由與邏輯樹相關,如果您將ComboBox放置在TabControl的TabItem中,則在引發ComboBox.SelectionChanged事件時,該事件將被路由到TabControl。但是,如果ComboBox不在TabControl的邏輯樹中,則事件將不會路由到TabControl。

更新 可檢查觸發事件中的TabControl SelectionChanged事件對象:

private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (e.OriginalSource == tb) 
     { 

     } 
    } 
+0

謝謝..但與徘徊在TabItem的任何控制也發生。 我應該處理我的標籤控件中的所有文本框和組合框..他們可能是數百.. – Hassanation

+0

@Hassanation我已經更新了我的答案。 –