C# WPF Tab Item Click 事件问题

C# WPF Tab Item Click event issue

我找到了 3 种获取选项卡项点击事件的方法。在所有情况下似乎都不起作用。 how to handle TabItem single click event in WPF?

  1. 使用 _GotFocus 事件。我先试过了,但如果标签已经在焦点上,它就不会触发。我们说的是单击 tab1,然后单击 tab 1 内的网格。然后单击 tab2,然后单击 tab2 中的网格。至此事件触发。然后,当我再次单击 Tab1 时...不会触发任何事件。我能够在 tab2 和 3 之间切换 4 或 5 次而没有触发任何事件。
  2. 标签标签的点击事件。这似乎是 3 个中最成功的一个。如果你点击一个标签,你的事件总是会被触发。但是...如果您不单击标签怎么办。标签不跨越整个选项卡控制框(您单击以切换的那个)。所以有可能作弊并点击边缘,然后就有了这个想法。
  3. SelectionChanged 事件。这个人的行为真的很奇怪。我会单击所有选项卡一次,它似乎工作正常。然后我在 Tab3 上单击了 tab2...我得到了两个事件...一个用于 tab2,然后一个用于 tab3。然后我回到 Tab3?

是否有仅适用于切换标签页的单一解决方案?我也可能在上面的实现中做错了什么……只是这看起来并不那么困难。我不确定我做错了什么...

提前致谢。

您一定是做错了什么,因为这是很常见的情况,TabItem Click 按预期工作。请尝试以下代码示例,看看它是否适合您。

    <TabControl>
        <TabItem Header="Tab1" MouseLeftButtonUp="TabItem_MouseLeftButtonDown"></TabItem>
        <TabItem Header="Tab2" MouseLeftButtonUp="TabItem_MouseLeftButtonDown"></TabItem>
        <TabItem Header="Tab3" MouseLeftButtonUp="TabItem_MouseLeftButtonDown"></TabItem>
    </TabControl>

在代码隐藏中

    private void TabItem_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        var tabItem = sender as TabItem;
        if(tabItem != null)
        {
            MessageBox.Show(tabItem.Header.ToString());
        }
    }