¿Cómo puedo hacer que un TabItem específico se enfoque en un TabControl sin evento click?

StackOverflow https://stackoverflow.com/questions/1227132

Pregunta

¿Cómo puedo decirle a mi TabControl que establezca el foco en su primer TabItem, algo como esto:

PSEUDO-CODE:

((TabItem)(MainTabControl.Children[0])).SetFocus();
¿Fue útil?

Solución

¿Qué tal esto?

MainTabControl.SelectedIndex = 0;

Otros consejos

this.tabControl1.SelectedTab = this.tabControl1.TabPages["tSummary"];

He descubierto que generalmente es una buena práctica nombrar sus pestañas y acceder a ellas a través del nombre para que si / cuando otras personas (o usted) agreguen o subpongan pestañas como parte de la actualización, no tengan que ir a través de su código y encuentre y repare todos esos "codificados" índices Espero que esto ayude.

Me doy cuenta de que esto fue respondido hace mucho tiempo, sin embargo, una mejor solución sería vincular sus elementos a una colección en su modelo y exponer una propiedad a la que está vinculado el elemento seleccionado.

XAML:

<!-- MyTemplateForItem represents your template -->
<TabControl ItemsSource="{Binding MyCollectionOfItems}"
            SelectedItem="{Binding SelectedItem}"
            ContentTemplate="{StaticResource MyTemplateForItem}">
</TabControl>

Código detrás:

public ObservableCollection<MyItem> MyCollectionOfItems {
    get;
    private set;
}

private MyItem selectedItem;
public MyItem SelectedItem{
    get { return selectedItem; }
    set {
        if (!Object.Equals(selectedItem, value)) {
            selectedItem = value;
            // Ensure you implement System.ComponentModel.INotifyPropertyChanged
            OnNotifyPropertyChanged("SelectedItem");
        }
    }
}

Ahora, todo lo que tiene que hacer para configurar el elemento es:

MyItem = someItemToSelect;

Puede usar la misma lógica con la propiedad SelectedIndex , además, puede usar los dos al mismo tiempo.

Este enfoque le permite separar su modelo correctamente de la interfaz de usuario, lo que podría permitirle reemplazar el TabControl con algo más en el futuro, pero no requiere que cambie su modelo subyacente.

Mire las propiedades para el control de pestaña ... Expanda las propiedades de TabPages " colección " ... Tome nota de los nombres que le dio a los miembros.

es decir. un control de pestañas llamado tabMain con 2 pestañas llamadas tabHeader y tabDetail

Luego, para seleccionar cualquiera de las pestañas ... Debe configurarla con el nombre de la pestaña

tabMain.SelectedTab = tabHeader;
tabControl1.SelectedTab = item;
item.Focus();

tabControl.SelectedItem = tabControl.Items [0];

Si tiene un Tabcontroller llamado tabControl, puede establecer el índice seleccionado desde diferentes métodos, en su mayoría utilizo los siguientes métodos.

código detrás:

tabControl.SelectedIndex = 0; // Sets the focus to first tabpanel

lado del cliente:

Primero, coloque el siguiente javascript en su archivo aspx / ascx:

<script type="text/javascript">
function SetActiveTab(tabControl, activeTabIndex) {
    var activeTab = tabControl.GetTab(activeTabIndex);
    if(activeTab != null)
        tabControl.SetActiveTab(activeTab);
}</script>

Luego agregue el siguiente evento del cliente al controlador preferido:

OnClientClick="function(s, e) { SetActiveTab(tabControl, 0);
  

es mejor usar el siguiente tipo de código para seleccionar el   elemento en la pestaña particular ...

.

 private void PutFocusOnControl(Control element)
        {
            if (element != null)
                Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Input,
                    (System.Threading.ThreadStart)delegate
                    {
                        element.Focus();
                    });
        }
  

Y en tiempo de llamada ... tabcontrol.isselected = true;   PutFocusOnControl (textbox1);

     

funcionará bien ...

Private Sub TabControl1_SelectedIndexChanged (remitente como objeto, e como EventArgs) maneja TabControl1.SelectedIndexChanged         'MsgBox (TabControl1.SelectedIndex)

    If TabControl1.SelectedIndex = 0 Then
        txt_apclntFrstName.Select()
    Else
        txtApplcnNo.Select()
    End If


End Sub
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top