【问题标题】:ComboBoxItem selection fires the TabControl_SelectionChanged EventComboBoxItem 选择触发 TabControl_SelectionChanged 事件
【发布时间】:2013-11-22 17:21:43
【问题描述】:

我在 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 上。

【问题讨论】:

    标签: c# wpf events user-interface


    【解决方案1】:

    在 ComboBox 的 SelectionChanged 事件中将 e.Handled 设置为 True。

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

    ComboBox和TabControl都是从Selector派生的,SelectionChanged事件是路由事件,所以子ComboBox的SelectionChanged会被路由到父控件TabControl。这是 WPF 路由事件行为。 Routed事件冒泡路由是根据逻辑树,如果你把一个ComboBox放在一个TabControl的一个TabItem中,当ComboBox.SelectionChanged事件引发时,该事件会被路由到TabControl。但是,如果 ComboBox 不在 TabControl 的逻辑树中,则不会将事件路由到 TabControl。

    更新 您可以在 TabControl SelectionChanged 事件中检查触发事件的对象:

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

    【讨论】:

    • 谢谢.. 但它也发生在悬停在 tabitem 中的任何控件上。我应该处理标签控件中的所有文本框和组合框吗?它们可能有数百个……
    猜你喜欢
    • 2020-07-18
    • 2017-05-30
    • 2011-08-30
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 2013-12-13
    相关资源
    最近更新 更多