¿Cómo puedo hacer que un TabItem específico se enfoque en un TabControl sin evento click?
-
22-07-2019 - |
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();
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