2017-01-27 13 views
0

タブ項目のクリックイベントには3つの方法があります。すべてのケースでどちらもうまくいかないようです。 how to handle TabItem single click event in WPF?C#WPFタブ項目Clickイベントの問題

  1. _GotFocusイベントを使用します。私はまずそれを試しましたが、すでにタブにフォーカスがある場合、それは起動しません。タブ1をクリックして、タブ1内のグリッドをクリックします。次にタブ2をクリックし、タブ2のグリッドをクリックします。これまでの出来事は発砲した。その後、再びTab1をクリックすると、イベントは発生しません。私はイベントが起こらずにタブ2と3の間を4回または5回移動することができました。
  2. タブラベルのイベントをクリックします。これは3の中で最も成功したようでした。あなたがラベルをクリックすると、あなたはイベントがいつも起きます。しかし、ラベルをクリックしないとどうなるでしょうか?ラベルは、タブコントロールボックス全体(切り替えのためにクリックしたもの)にまたがっていません。だから、エッジをチートしてクリックすると、このアイデアが出てきます。
  3. SelectionChangedイベント。これは本当に変です。私はすべてのタブを一度クリックするとうまくいくように見えました。それから私はTab3にいて、tab2をクリックしていました...そして、私は2つのイベントを持っていました... 1つはtab2のため、もう1つはタブ3のためです。

タブを切り替えるだけのソリューションがありますか?私は上記の実装で何か間違ったことをしている可能性もあります。それは難しいとは思えません。私は何が間違っているのか分かりません...

ありがとうございます。

答えて

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

Ok ..私は別の問題があります...グリッドを持つタブの場合...グリッド内をクリックするたびにイベントがトリガされます。それを防ぐ方法はありますか? – Ken

関連する問題