2010-11-16 19 views
46

Cuando presiona Ingrese en cualquier lugar en un HTML form activa su action, que es equivalente a presionar el botón submit. Cómo hacer una ventana que cuando presiono ¿Ingresa en cualquier lugar donde desencadene un evento?¿Cómo hacer un botón de enviar en WPF?

+0

¿Hay una descripción de este tipo de propiedad en WPF? Si es así, establecerlo en verdadero enviará todas las pulsaciones de tecla directamente al formulario y puede usar el evento de pulsación de tecla para hacerlo. –

Respuesta

91

Establecer la propiedad IsDefault en el botón true para habilitar la Introduzca tecla para activar la acción de dicho botón. También está la propiedad IsCancel que hace lo mismo con la clave Escape.

+1

Esa fue mi primera sugerencia en mi respuesta a continuación, pero luego noté que XMLforDummies no dijo que tenía un botón "Aceptar" o "Enviar" en el formulario, así que edité mi respuesta. El único "problema" con el que puede encontrarse con esta solución es que si un botón que no es el botón "Aceptar"/"Enviar" tiene foco, presionar la tecla Intro solo hará clic en el botón enfocado y no activará el otro evento que es probablemente lo que espera, pero solo quería traer ese punto. – ihatemash

+1

Creo que el comportamiento es intencional. Por ejemplo, si ese botón abre un cuadro de diálogo modal, y al presionar la tecla Intro desencadena el envío, no desea que se activen ambos eventos. –

6

asignar el evento PreviewKeyDown a la ventana en XAML compruebe el KeyEventArgs en código subyacente para determinar si el usuario pulsa la tecla de Introduzca.

código XAML:

<Window 
    [...] 
    PreviewKeyDown="Window_PreviewKeyDown"> 

Código atrás:

private void Window_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Enter) 
    { 
     // Whatever code you want if enter key is pressed goes here 
    } 
} 
+0

Lo siento, me acabo de dar cuenta de que no dijo que tiene un botón en el formulario. Debe tener un botón en el formulario antes de que esto funcione. – ihatemash

+1

De lo contrario, simplemente agregue IsHitTestVisible = "true" a las propiedades de la ventana – Guy

+0

Advertencia: Este evento se activará en cualquier control de la ventana, incluso en otros botones. Lo cual no es normalmente un problema a menos que los usuarios marquen alrededor del formulario y utilicen los botones para ingresar. –

0

Encontré que el control DatePicker se tragará Ingrese la tecla para que no se haga clic en el botón predeterminado. Escribí este controlador de eventos para arreglar eso. Use el PreviewKeyUp para asegurarse de que el DatePicker realice su código de formato de fecha antes de hacer clic en el botón predeterminado.

private void DatePicker_PreviewKeyUp(object sender, KeyEventArgs e) { 
    // event handler to click the default button when you hit enter on DatePicker 
    if (e.Key == Key.Enter) { 
     // https://www.codeproject.com/Tips/739358/WPF-Programmatically-click-the-default-button 
     System.Windows.Input.AccessKeyManager.ProcessKey(null, "\x000D", false); 
    } 
} 
Cuestiones relacionadas