2010-11-16 2 views
5

Il n'y a malheureusement aucun événement TabControl.SelectionChanging (Selector.SelectionChanging), j'ai du mal à implémenter ce comportement afin que je puisse annuler la demande de changement.Existe-t-il un moyen d'annuler TabControl.Items.CurrentChanging?

J'ai essayé de gérer l'événement TabControl.Items.CurrentChanging réglage e.Cancel (du CurrentChangingEventArgs) à true (et est ItemCollection propriété Items), mais l'interface utilisateur est mis à jour avec le nouvel onglet, bien que l'élément ne change pas dans la collection .

Existe-t-il un moyen d'empêcher l'utilisateur de passer à un autre TabItem lorsqu'une condition est insatisfaite?

Répondre

5

Je ne connais pas la raison exacte pour laquelle cela se produit, et cela m'ennuie énormément.

Mais voici ma solution de contournement pour cela:

Dans l'exemple ci-dessous, case est « verrouillage » l'onglet en cours. Donc vérifié signifie que l'utilisateur ne peut pas changer d'onglet. Fondamentalement, ce qui se passe est (si je comprends bien) l'arbre visuel est mis à jour, mais pas l'arbre logique. La manière ci-dessus force le visuel à se synchroniser avec l'arbre logique.

+0

Bonne prise. Je vous remercie. – Shimmy

0

Vous pouvez également gérer l'événement PreviewLostKeyboardFocus sur chaque TabItem, et définissez la propriété Handled des arguments d'événement à true pour empêcher le passage à un autre onglet:

protected void tabItem_PreviewLostKeyboardFocus(object sender, 
    KeyboardFocusChangedEventArgs e) 
{ 
    if (!ValidateTabItem((TabItem) sender)) { 
     e.Handled = true; 
    } 
} 

Voir http://www.netframeworkdev.com/windows-presentation-foundation-wpf/how-to-cancel-navigation-between-tabitems-in-a-tabcontrol-84994.shtml.

Questions connexes