2009-07-24 14 views
17

¿Cuál es la mejor forma de capturar la clave de devolución en un PasswordBox? (WPF/XAML)¿Cuál es la mejor forma de capturar la clave de devolución en un PasswordBox? (WPF/XAML)

Tengo un campo TextBox y un campo PasswordBox en mi formulario de inicio de sesión (para el ingreso de nombre de usuario y contraseña). También tengo un botón de inicio de sesión que invoca el método que realiza el proceso de validación de inicio de sesión.

Necesito hacer la tecla de retorno reaccionar de la misma manera en el PasswordBox, de modo que el usuario puede tener la opción de ingresar su nombre de usuario y contraseña y simplemente pulsa Intro para iniciar sesión.

¿Alguien sabe cómo es esto hecho en WPF? Cualquier ayuda es apreciada.

Respuesta

47

Existe un mecanismo aún más fácil de activar el código del botón. La clase de botón WPF proporciona una propiedad llamada IsDefault. Cuando se establece en verdadero, si presiona "return" mientras algunos objetos en la ventana tienen foco, el código del evento click del botón se disparará automáticamente. Este mecanismo funciona como un encanto con la contraseña.

+0

¡Incluso mejor! ¡Gracias! – Giffyguy

+0

Gracias ¡Exactamente lo que necesitaba! – rikket

+4

Solo para observar, las propiedades IsDefault, IsDefaulted e IsCancel no se implementan en la clase de botón en WinRT. Decepcionante. –

1

Podría intentar usar un RoutedCommand.

Puede establecerlo en la propiedad Comando del botón.
También puede agregar una KeyGesture a los InputBindings de su forma de inicio de sesión para enlazar la tecla Enter para activar su RoutedCommand.

A continuación, agregue un CommandBinding en los Comandos de su formulario de inicio de sesión para vincular RoutedCommand a los controladores Ejecutados en su código y realizar o desencadenar su proceso de validación de inicio de sesión.

+0

¡Sonido potente! ¿Pero es realmente la forma más simple de hacer esto, ahora? Si es así, voy a tener ganas de Microsoft, déjame decirte ... – Giffyguy

+0

Depende. De esta forma, solo tiene un controlador en el código en lugar de dos (en el botón, uno en la contraseña). Es más flexible y no tan complejo como parece. Solo hay dos pasos adicionales que debe realizar una sola vez: definir el RoutedCommand y agregar CommandBinding. KeyGesture es similar a agregar un manejador de eventos a la contraseña, para el botón se establece un comando en lugar del manejador de clic. Pero usted tiene un punto, es probable que sea excesivo para un formulario de inicio de sesión simple. :) – Bubblewrap

4

Puede controlar el evento KeyDown en el PasswordBox (Cuadro de texto y si se desea) y luego utilizar el siguiente controlador de eventos -

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

Esto funcionará perfectamente, solo tengo problemas para encontrar los eventos utilizables para diferentes controles de WPF ... ¡Gracias! – Giffyguy

Cuestiones relacionadas