2010-11-16 7 views
46

Lorsque vous appuyez sur Entrez n'importe où dans un code HTML form il déclenche son action, ce qui équivaut à appuyer sur le bouton submit. Comment faire une fenêtre que lorsque j'appuie sur Entrez partout où cela va déclencher un événement?Comment créer un bouton de soumission dans WPF?

+0

Y a-t-il une propriété d'aperçu de clé dans WPF? Si c'est le cas, le paramétrer sur true enverra toutes les touches directement au formulaire et vous pourrez utiliser l'événement keypress pour le faire. –

Répondre

91

Définissez la IsDefault propriété sur le bouton true pour activer la Entrez pour activer l'action de ce bouton. Il existe également la propriété IsCancel qui fait la même chose pour la touche Escape.

+1

C'était ma première suggestion dans ma réponse ci-dessous mais j'ai remarqué que XMLforDummies n'a pas dit qu'il avait un bouton "OK" ou "Soumettre" sur le formulaire alors j'ai édité ma réponse. Le seul "problème" que vous pouvez rencontrer avec cette solution est, si un bouton autre que le bouton "OK"/"Soumettre" a le focus, appuyer sur la touche Entrée ne fera que cliquer sur le bouton focalisé et ne déclenchera pas l'autre événement. probablement ce que vous attendez, mais je voulais juste apporter ce point. – ihatemash

+1

Je pense que ce comportement est intentionnel. Par exemple, si ce bouton ouvre une boîte de dialogue modale et que vous appuyez sur la touche Entrée pour déclencher l'envoi, vous ne voulez pas que les deux événements se déclenchent. –

6

affecter l'événement PreviewKeyDown à la fenêtre en XAML puis vérifiez la KeyEventArgs en codebehind pour déterminer si l'utilisateur appuie sur la touche Entrée .

code XAML:

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

derrière:

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

Désolé, je viens de réaliser que vous n'avez pas dit que vous aviez un bouton sur le formulaire. Vous devez avoir un bouton sur le formulaire avant que cela fonctionne. – ihatemash

+1

Sinon, ajoutez simplement IsHitTestVisible = "true" aux propriétés de la fenêtre – Guy

+0

Avertissement: Cet événement se déclenchera sur n'importe quel contrôle dans la fenêtre, même les autres boutons. Ce qui n'est normalement pas un problème à moins que vos utilisateurs ne tabulent autour du formulaire et utilisent les boutons Entrée pour cliquer. –

0

J'ai trouvé que le contrôle DatePicker avale le Entrez keypress de sorte que le bouton par défaut ne soit pas cliqué. J'ai écrit ce gestionnaire d'événement pour résoudre ce problème. Utilisez le PreviewKeyUp pour vous assurer que le DatePicker exécute son code de formatage de date avant de cliquer sur le bouton par défaut.

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); 
    } 
} 
Questions connexes