【问题标题】:C# WPF Tab Item Click event issueC# WPF 选项卡项单击事件问题
【发布时间】:2017-01-27 15:33:59
【问题描述】:

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

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

是否有一个解决方案只适用于切换标签?我也可能在上述实现中做错了什么……只是这似乎并不难。我不确定我做错了什么......

提前致谢。

【问题讨论】:

    标签: c# wpf events tabcontrol


    【解决方案1】:

    您一定是做错了什么,因为这是很常见的情况,并且 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());
            }
        }
    

    【讨论】:

    • 谢谢!那工作得很好。我也知道为什么我的代码不起作用。如果您使用代码并将 MouseLeftButtonUp 更改为 MouseLeftButtonDown ...这不再有效。不知道为什么,但这就是让我与众不同的原因。非常感谢!
    • 好的..我还有另一个问题...对于具有网格的选项卡...每次我在网格内单击时都会触发该事件。有什么办法可以防止吗?
    • 这是因为事件冒泡。您可以通过在网格单击处理程序中设置 e.Handled = true 来停止此操作。
    猜你喜欢
    • 2017-01-08
    • 2019-03-30
    • 2011-08-26
    • 2017-09-29
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    相关资源
    最近更新 更多