Come posso fare una perdere il controllo attivo se l'utente fa clic su qualcosa che non è attivabile?
Domanda
Ho un ItemsControl riempita con decine di articoli; ogni articolo è una casella di testo legato e un paio di pulsanti. Perché voglio che l'utente sia in grado di scheda da casella di testo alla casella di testo, i tasti hanno impostato Focusable su False. Questo funziona bene. L'unico problema è che, poiché il testo scatole non stanno perdendo la messa a fuoco, il loro legame non è aggiornare la fonte, in modo che il codice dietro i pulsanti non funzionano con i giusti valori.
riesco a pensare a un modo per risolvere questo problema, per esempio avendo il gestore Click per i pulsanti navigare attraverso l'albero logica alla loro casella di testo associato e il processo è vincolante aggiornamento della fonte in modo esplicito. Ma mi sembra che ci deve essere un modo migliore di quello, che probabilmente sarebbe ovvio per me se avevo una migliore comprensione del modello di messa a fuoco. C'è?
Soluzione
Come prestazioni è un problema, si potrebbe trovare un scritto da Josh Smith utile. Il contesto è molto simile al vostro problema. Josh risolve comportando l'aggiornamento obbligatorio manualmente:
TextBox focusedTextBox = Keyboard.FocusedElement as TextBox;
if (focusedTextBox == null)
return;
BindingExpression textBindingExpr =
focusedTextBox.GetBindingExpression(TextBox.TextProperty);
if (textBindingExpr == null)
return;
textBindingExpr.UpdateSource();
Altri suggerimenti
Se le prestazioni permette è possibile modificare la UpdateSourceTrigger
di quegli elementi TextBox a PropertyChanged
invece di LostFocus
.