c# - una - tabcontrol visual basic
En C#WPF, ¿por qué el evento SelectionChanged de mi TabControl se dispara con demasiada frecuencia? (4)
Si ha agregado un controlador con AddHandler en un elemento primario, todos los cambios de selección desencadenarán el evento SelectionChanged. En este caso, puede darle un nombre a su TabControl y luego verificar en el Manejador de eventos si el nombre de la fuente original es el nombre de su TabControl.
Tengo una GUI con pestañas con cada pestaña que contiene un Marco. En uno de estos marcos hay un DataGrid. Cuando el usuario selecciona esta pestaña, necesito que mi cuadrícula de datos esté ordenada, por lo que estoy usando el evento TabControl SelectionChanged para activar la ordenación. Sin embargo, este evento se desencadena cada vez que se selecciona un elemento del DataGrid, aunque las pestañas permanezcan intactas.
He intentado varios eventos diferentes: GotFocus para un TabItem RequestBringIntoView para un TabItem
pero todos parecen sufrir de este problema. ¿Qué está causando esto?
El TabControl.SelectionChanged
es el mismo evento que un ComboBox.SelectionChanged
Se origina de Selector.SelectionChanged
.
Por lo tanto, si no marca su evento como manejado en su controlador de eventos, se disparará en el árbol y eventualmente llegará a su TabControl
, que está causando este problema de "disparar con demasiada frecuencia".
Marque su evento como manejado en su SelectionChanged de su ComboBox
/ ListBox
/ ListView
/ cualquier otro Selector que use en su DataGrid de esta manera:
private void MyComboBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
e.Handled = true;
}
Y esta inconveniencia desaparecerá;).
Otro buen enfoque es agregar un controlador a tabControl.Items.SelectionChanged:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
ItemCollection view = tabControl.Items;
view.CurrentChanged += new EventHandler(view_CurrentChanged);
}
void view_CurrentChanged(object sender, EventArgs e)
{
throw new NotImplementedException();
}
Tal vez no sea la forma xamly, pero es menos dolorosa, ya que solo se dispara cuando se cambia un elemento.
private void tabControlName_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (e.Source is TabControl) //if this event fired from TabControl then enter { if (tabItemName.IsSelected) { //Do your job here } } }