2010-11-16 10 views
5

Non c'è purtroppo alcun evento TabControl.SelectionChanging (Selector.SelectionChanging), sto cercando di implementare questo comportamento in modo da poter annullare la richiesta di modifica.C'è un modo per annullare TabControl.Items.CurrentChanging?

ho cercato di gestire l'evento TabControl.Items.CurrentChanging (la proprietà è Items e ItemCollection) impostazione e.Cancel (del CurrentChangingEventArgs) al vero, ma l'interfaccia utente è viene aggiornato con la nuova scheda, anche se l'articolo non viene modificato nella collezione .

C'è un modo per impedire all'utente di passare a un diverso TabItem quando una condizione è insoddisfatta?

risposta

5

Non conosco il motivo esatto per cui questo accade e mi infastidisce molto.

Ma qui è la mia soluzione per esso:

Nell'esempio che si segue, casella di controllo è "chiudendo" la scheda corrente. Così controllato significa che l'utente non può cambiare scheda.

Fondamentalmente, ciò che accade è (se lo capisco correttamente) l'albero visivo viene aggiornato, ma l'albero logico no. Il modo sopra esposto costringe la visualizzazione a sincronizzarsi con l'albero logico.

+0

Buona cattura. grazie. – Shimmy

0

È inoltre possibile gestire l'evento PreviewLostKeyboardFocus su ogni TabItem, e impostare la proprietà Handled degli argomenti eventi per true per impedire il passaggio a un'altra scheda:

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

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

Problemi correlati