2017-01-27 7 views
0

Я нашел 3 способа получения событий щелчка для элемента табуляции. Кажется, что все работает не во всех случаях. how to handle TabItem single click event in WPF?C# WPF Tab Элемент Click event issue

  1. Использование события _GotFocus. Сначала я попробовал это, но если вкладка уже находится в фокусе, она не срабатывает. И мы говорим о нажатии на tab1, а затем на сетке внутри вкладки 1. Затем нажмите на tab2, затем нажмите на сетку в tab2. Пока что обстреляли события. Затем, когда я снова нажимаю Tab1, никаких событий не запускается. Мне удалось перейти между tab2 и 3 4 или 5 раза без каких-либо событий.
  2. Нажмите событие для ярлыков вкладок. Это, казалось, было самым успешным из 3. Если вы нажмете на ярлык, событие всегда срабатывает. Однако ... что, если вы не нажмете на ярлык. Метка не охватывает весь блок tabcontrol (тот, который вы нажимаете для переключения). Таким образом, можно обмануть и щелкнуть по краям, и там идет эта идея.
  3. Событие SelectionChanged. Этот человек вел себя очень странно. Я бы сразу щелкнул по всем вкладкам и, похоже, работал нормально. Затем я был на Tab3 и нажал на tab2 ... и у меня было два события ... один для tab2 сначала, а затем для вкладки 3. Затем я вернусь на Tab3?

Есть ли единственное решение, которое работает только для переключения вкладок? Я мог бы также сделать что-то неправильно в вышеупомянутых реализациях ... просто это не кажется таким сложным. Я не уверен, что я могу сделать неправильно ...

Заранее спасибо.

ответ

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()); 
     } 
    } 
+0

Спасибо! Это сработало отлично. Я также знаю, почему мой код не работал. Если вы берете код и меняете MouseLeftButtonUp на MouseLeftButtonDown ... это больше не работает. Не знаю, почему, но для меня это изменило ситуацию. Спасибо огромное! – Ken

+0

Отличный .. принимайте его как ответ. –

+0

Хорошо .. У меня есть еще одна проблема ... для вкладок с сетками ... событие запускается каждый раз, когда я нажимаю внутри сетки. Любой способ предотвратить это? – Ken