vertical style custom wpf tabcontrol tabitem

custom - wpf tabcontrol style



Cómo seleccionar mediante programación un elemento de tabla en WPF TabControl (7)

Como dice @Chris, cualquiera de las tres primeras cosas debería funcionar y como dice @Phyxx, no siempre funciona. El problema es algo sutil sobre el orden de los cambios de propiedad. Para solucionarlo, debe permitir que WPF invoque su código de selección de tabulación en su propio tiempo:

Dispatcher.BeginInvoke((Action)(() => MyTabControl.SelectedIndex = x));

Esto hace exactamente lo que hace el temporizador de Phyxx, pero de una manera un poco menos extrema.

Me gustaría saber cómo seleccionar un elemento de tabla específico en un control de tabla WPF.

Intenté estos bramidos pero nada funciona!

MyTabControl.SelectedIndex = x MyTabControl.SelectedItem = MyTabItem MyTabControl.SelectedValue = MyTabItem MyTabItem.IsSelected = True


He implementado una pequeña solución basada en enlaces MVVM para seleccionar los paneles de pestañas de forma pragmática.

  1. define una propiedad en tu modelo de vista - Tipo int seleccionado

  2. vincular la propiedad en su vista

    <TabControl x:Name="TabsCandidate" VerticalAlignment="Stretch" TabStripPlacement="Top" SelectedIndex="{Binding Selected}"

  3. int privado seleccionado

    public int Selected { get { return _selected; } set { _selected = value; OnPropertyChanged("Selected"); } }

  4. Establezca el valor en Seleccionar propiedad, simplemente el enlace activará el panel de pestañas.

    Si desea navegar desde el panel de pestañas dentro de los paneles de pestañas principales, esta solución simplemente funcionará. Todo lo que necesita hacer es acceder al contexto de datos de su control y configurarlo.

    // set the property value of the view model which points the index of the tab controller. ((CandidateViewModel)((System.Windows.FrameworkElement)candidateTab.Content).DataContext).Selected = CandidateLogTabIndex;


Intente configurar MyTabControl.SelectedIndex = x en el controlador de eventos de DataContextChanged o Loaded de su interfaz de usuario. Espero que esto funcione.


Probé todos los métodos que deberían haber funcionado, pero como usted, nada cambió la pestaña seleccionada. Al final conseguí que funcionara al poner el código de selección de la pestaña en una marca de DispatcherTimer .

DispatcherTimer switchTabTimer = new DispatcherTimer(); switchTabTimer.Interval = new TimeSpan(0); switchTabTimer.Tick += (object timerSender, EventArgs timerE) => { myTabControl.SelectedIndex = 0; switchTabTimer.Stop(); }; switchTabTimer.Start();


Recorra los elementos de tabla y para seleccionar la pestaña, establezca

tabItem.IsSelected = true

Si hay algún otro lugar debido al cambio de enlace verá un problema. De lo contrario, el código anterior debería funcionar.


Todos sus ejemplos, excepto el tercero, son correctos y funcionarán. El problema debe estar en otro lugar. Tal vez restablece el elemento después de la configuración o su código nunca se llama?

Válido

MyTabControl.SelectedIndex = x MyTabControl.SelectedItem = MyTabItem MyTabItem.IsSelected = True

Inválido

MyTabControl.SelectedValue = MyTabItem


Una cosa que no se ha mencionado anteriormente:

La razón principal por la que algo como esto no funciona es que los elementos de la pestaña no tienen el conjunto de propiedades "Nombre". Cada elemento de la pestaña del control de pestaña que desea navegar programáticamente debe tener su propiedad de nombre establecida para que funcione cualquiera de los códigos anteriores.

<tabItem Name="tab1"></tabItem>