2009-07-24 10 views
17

Qual è il modo migliore per recuperare la chiave di ritorno in una PasswordBox? (WPF/XAML)Qual è il modo migliore per catturare la chiave di restituzione in una PasswordBox? (WPF/XAML)

Ho un campo TextBox e un campo PasswordBox nel mio modulo di login (per username e password). Ho anche un pulsante di accesso che richiama il metodo che esegue il processo di convalida dell'accesso.

ho bisogno di fare il tasto Invio reagire allo stesso modo nel PasswordBox, in modo che l'utente può avere l'opzione di inserire il proprio nome utente e password e semplicemente premere Invio effettuare il login.

Qualcuno sa come questo è fatto in WPF? Qualsiasi aiuto è apprezzato.

risposta

47

Esiste un meccanismo ancora più semplice per attivare il codice del pulsante. La classe Button WPF fornisce una proprietà denominata IsDefault. Se impostato su true, se si preme return mentre alcuni oggetti nella finestra hanno lo stato attivo, il codice dell'evento click del pulsante verrà attivato automaticamente. Questo meccanismo funziona come un incantesimo con la passwordbox.

+0

Ancora meglio! Grazie! – Giffyguy

+0

Grazie Esattamente quello di cui avevo bisogno! – rikket

+4

Giusto per notare, le proprietà IsDefault, IsDefaulted e IsCancel non sono implementate nella classe button in WinRT. Deludente. –

1

Si potrebbe provare a utilizzare un RoutedCommand.

È possibile impostarlo sulla proprietà Comando del pulsante.
È anche possibile aggiungere un KeyGesture agli InputBind del proprio loginform per associare il tasto Invio per attivare il RoutedCommand.

Quindi aggiungere un CommandBinding nel CommandBindings del proprio loginform per associare il RoutedCommand ai gestori Eseguiti nel codice ed eseguire o attivare il processo di convalida dell'accesso.

+0

Suoni potenti! Ma è davvero il modo più semplice per farlo ora? Se è così - avrò una buona notizia per Microsoft, lasciatemi dire ... – Giffyguy

+0

Depends. In questo modo hai solo un gestore nel codice invece di due (su per il pulsante, uno per la passwordbox). È più flessibile e non così complesso come sembra. Ci sono solo due passaggi aggiuntivi che devi fare solo una volta: definire il RoutedCommand e aggiungere CommandBinding. KeyGesture è simile all'aggiunta di un gestore di eventi alla passwordbox, per il pulsante si imposta un comando anziché il gestore Click. Ma tu hai un punto, probabilmente è eccessivo per un semplice modulo di accesso. :) – Bubblewrap

4

È possibile gestire l'evento KeyDown sul PasswordBox (e TextBox se lo si desidera) e poi utilizzare il seguente gestore di eventi -

private void OnKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key != Key.Return && e.Key != Key.Enter) 
     return; 
    e.Handled = true; 
    HandleEnter(); 
} 
+0

Funzionerà perfettamente, ho solo difficoltà a trovare gli eventi utilizzabili per diversi controlli WPF ... Grazie! – Giffyguy

Problemi correlati