web-dev-qa-db-ja.com

C#WPFで、TabControlのSelectionChangedイベントが頻繁に発生するのはなぜですか?

各タブにフレームが含まれるタブ付きGUIがあります。これらのフレームの1つにDataGridがあります。ユーザーがこのタブを選択すると、データグリッドをソートする必要があるため、TabControl SelectionChangedイベントを使用してソートをトリガーします。ただし、タブ自体は変更されないままであっても、DataGridから項目が選択されるたびに、このイベントがトリガーされます。

さまざまなイベントを試しました:TabItemのGotFocus TabItemのRequestBringIntoView

しかし、彼らは皆この問題に苦しんでいるようです。これは何が原因ですか?

51
Anders

TabControl.SelectionChangedComboBox.SelectionChangedと同じイベントです

Selector.SelectionChanged から始まります。

そのため、イベントハンドラでイベントを処理済みとしてマークしないと、ツリーがバブルアップし、最終的にTabControlに到達するため、この「頻繁に起動する」問題が発生します。

ComboBox/ListBox/ListView // DataGridで使用する他のセレクターのSelectionChangedでイベントを処理済みとしてマークします。

private void MyComboBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    e.Handled = true;
}

そして、この不便はなくなります;)。

89
Arcturus
 private void tabControlName_SelectionChanged(object sender、SelectionChangedEventArgs e)
 {
 if(e.Source is TabControl)//このイベントがTabControlから発生した場合、enter 
 { 
 if(tabItemName.IsSelected)
 {
 //ここで仕事をする
} 
} 
} 
24
Towhid

親要素にAddHandlerを使用してハンドラーを追加した場合、すべての選択変更によりSelectionChangedイベントが発生します。この場合、TabControlに名前を付け、OriginalSourceの名前がTabControlの名前であるかどうかをEventHandlerでチェックインできます。

2
HCL