visual una tab selectedtab seleccionar pestaña pagina net metro ejemplos control como cambiar c# wpf tabcontrol tabitem

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 } } }