Come posso fare una perdere il controllo attivo se l'utente fa clic su qualcosa che non è attivabile?

StackOverflow https://stackoverflow.com/questions/2298913

  •  21-09-2019
  •  | 
  •  

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'è?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top