我在TabItem中有一个ComboBox。 问题是,当我选择任何ComoboxItem时,会触发TabControl_SelectionChanged事件。我在该事件中有一些函数,一旦我更改了ComboBox选择的项目,我就不希望它被实现。
<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>
编辑: 此外,我在Tab项目中悬停任何控件时都面临着这个问题,因为它也会悬停tabitem。
答案 0 :(得分:3)
在ComboBox的SelectionChanged事件中将e.Handled设置为True。
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
e.Handled = true;
}
ComboBox和TabControl派生自Selector,而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)
{
}
}