C#WPF选项卡项目单击事件问题

时间:2017-01-27 15:34:00

标签: c# wpf events tabcontrol

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

  1. 使用_GotFocus事件。我首先尝试了,但如果标签已经在焦点上,则它不会触发。我们谈论的是单击tab1,然后单击选项卡1中的网格。然后单击tab2,然后单击tab2中的网格。到目前为止事件被解雇然后当我再次点击Tab1时......没有事件被触发。我可以在tab2和3之间进行4或5次,没有事件被解雇。
  2. 单击标签标签的事件。这似乎是最成功的3.如果您点击标签,您的活动总会激活。但是......如果你不点击标签怎么办?标签不会跨越整个tabcontrol框(您单击要切换的那个)。所以有可能作弊并点击边缘,这就是这个想法。
  3. SelectionChanged事件。这个表现得非常奇怪。我会点击所有选项卡一次,它似乎工作正常。然后我在Tab3上点击了tab2 ...我得到了两个事件......一个用于tab2,一个用于tab 3.然后我回到Tab3?
  4. 是否只有一个解决方案适用于切换标签?我也可能在上面的实现中做错了...只是这看起来并不困难。我不确定我做错了什么......

    提前致谢。

1 个答案:

答案 0 :(得分: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>

在codebehind中

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