Procédure de programmation pour sélectionner un TabItem dans WPF TabControl
Je voudrais savoir comment sélectionner un TabItem dans un WPF TabControl.
J'ai essayé ces soufflet, mais rien ne les travaux!
MyTabControl.SelectedIndex = x
MyTabControl.SelectedItem = MyTabItem
MyTabControl.SelectedValue = MyTabItem
MyTabItem.IsSelected = True
Vous devez vous connecter pour publier un commentaire.
Comme @Chris dit, l'une des trois premières choses devrait travail et que @Phyxx dit, il n'est pas toujours vraiment le travail. Le problème, c'est quelque chose subtile sur l'ordre de modifications de la propriété. Pour contourner cela, vous devez laisser le WPF appeler votre onglet de sélection de code dans son propre temps:
Ce qui fait exactement ce que Phyxx minuterie, mais en un peu moins de façon extrême.
Dispatcher.*Invoke
de manœuvre code entre les threads, mais je obtenez nerveux quand j'ai aveuglément l'utiliser dans un seul thread juste parce que je ne comprends pas ce qui se passe.Dispatcher
, soit, ce qui est comme de thread à un autre mode de chemin alors qu'il devrait simplement être en mesure de prendre la même instruction dans la canalisation principale. Mais il est possible, comme Adrian dit - il est appelé trop tôt, et, plus tard, les commandes de l'écraser - il est appelé trop tard, et le récepteur ne sait pas quoi faire. Sonne comme une mauvaise conception sur MS d'avoir ce genre de déconnexion, mais suppose que c'est ce que nous sommes coincés avec.Tous vos exemples à l'exception de la troisième sont corrects et le travail. Le problème doit être à un autre endroit. Peut-être que vous réinitialisez le point après le réglage ou votre code n'est jamais appelé?
Valide
Invalide
Boucle à travers le TabItems et pour l'onglet sélectionné, définissez
Si il y a de tout autre lieu en raison de la liaison de changer, vous verrez problème. Sinon, le code ci-dessus devrait fonctionner.
Une chose qui n'a pas été mentionné ci-dessus:
La principale raison de quelque chose comme cela ne fonctionne pas, c'est que l'onglet éléments n'ont pas la propriété "Name" ensemble. Chaque onglet de l'élément de l'onglet contrôle à laquelle vous souhaitez naviguer par programme doit avoir son nom de la propriété pour tout le code ci-dessus fonctionne.
J'ai mis en place un petit MVVM les liaisons à base de solution pour la sélection de l'onglet panneaux de manière pragmatique.
définir une propriété dans votre modèle de vue Sélectionné le type int
lier la propriété de votre point de vue
private int _selected;
Définir la valeur de Sélectionnez propriété, il suffit de la liaison va activer le panneau d'onglets.
si vous souhaitez naviguer à partir de l'onglet panneau à l'intérieur de parent panneaux à onglets, cette solution fonctionne tout simplement, Tout ce que vous devez faire est, l'accès au contexte de données de votre commande et la régler
Essayez de définir la
MyTabControl.SelectedIndex = x
dans le gestionnaire d'événements deDataContextChanged
ouLoaded
de votre INTERFACE utilisateur. Espérons que cela va fonctionner.J'ai essayé toutes les méthodes que devrait ont travaillé, mais comme vous l'avez rien n'a réellement changé l'onglet sélectionné. En fin de compte je l'ai eu à travailler en mettant l'onglet de sélection de code dans un
DispatcherTimer
tique.si vous ne connaissez pas l'index de l'onglet (allusion à son pas
TabIndex
) utilisation:ou de le modifier pour faire une recherche par nom si vous ne voulez pas conserver une référence à l'onglet