que je fais quelque chose comme ce qui suit pour empêcher une sélection d'onglet de changer:WPF Cancelling provoque la sélection Tab Changer l'événement de se produire deux fois
tabControl.Items.CurrentChanging += new CurrentChangingEventHandler(Items_CurrentChanging);
void Items_CurrentChanging(object sender, CurrentChangingEventArgs e)
{
if(dataIsInvalid)
{
// Show some popup message
var item = ((ICollectionView)sender).CurrentItem;
e.Cancel = true;
tabControl.SelectedItem = item; // !! This causes the CurrentChanging event to happen twice !!
// But without this the visual tree does not update! :(
}
}
Cependant, le problème que je vois en ce moment est que la dernière ligne ci-dessus provoque un événement CurrentChanging à se produire une deuxième fois, et mon message contextuel est affiché deux fois. Non seulement cela, il est affiché la deuxième fois après avoir d'abord mis au point une autre fenêtre, puis de mettre l'accent sur la fenêtre de mon contrôle onglet. Des idées pour lesquelles cela pourrait se produire?
--EDIT-- Il semble que je devrais vraiment seulement besoin e.Cancel
et ne nécessite pas de mettre à jour le SelectedItem
nouveau. Cependant, l'arborescence visuelle n'est pas mise à jour sauf si je le fais. Est-il possible de s'assurer que l'arborescence visuelle du contrôle onglet est mis à jour après e.Cancel
se produit, sans avoir à mettre à jour le SelectedItem
?
Est-ce que 'e.Cancel = true' fonctionne non seulement? – LPL
Je suis d'accord avec LPL sur le e.Cancel. Personnellement, je n'aime pas les popups. Une autre approche consiste à valider l'entrée et à afficher l'erreur de validation via la validation. Et vous pouvez même désactiver tous les autres onglets sur une erreur de validation. – Paparazzi
malheureusement juste en utilisant 'e.Cancel' ne fonctionne pas, la sélection de l'onglet change encore: s Il semble que cette personne a eu un problème similaire: http://stackoverflow.com/questions/4194290/is-there-a-way -to-cancel-tabcontrol-items-currentchanging mais la solution de contournement provoque un comportement étrange pour moi, comme je l'ai décrit ci-dessus. –