2010-11-16 6 views
46

Wenn Sie drücken Geben Sie irgendwo in einem HTML form es löst action, das entspricht Drücken der submit Taste. Wie mache ich ein Fenster, das, wenn ich drücke Geben Sie irgendwo ein es wird ein Ereignis auslösen?Wie man einen Submit-Button in WPF erstellt?

+0

Gibt es eine Schlüsselvorschaueigenschaft in WPF? Wenn dies der Fall ist, wird durch das Setzen von "true" der gesamte Tastendruck direkt an das Formular gesendet und Sie können das keypress-Ereignis dazu verwenden. –

Antwort

91

Stellen Sie die IsDefault Eigenschaft auf die Schaltfläche auf true die Enter-Taste zu aktivieren, die Aktion der Schaltfläche zu aktivieren. Es gibt auch die IsCancel Eigenschaft, die dasselbe für den Escape Schlüssel tut.

+1

Das war mein erster Vorschlag in meiner Antwort unten, aber dann bemerkte ich, dass XMLforDummies nicht sagte, dass er/sie eine "OK" oder "Submit" Taste auf dem Formular hatte, also editierte ich meine Antwort. Das einzige "Problem", auf das Sie mit dieser Lösung stoßen könnten, ist, dass, wenn eine andere Schaltfläche als die "OK"/"Senden" -Schaltfläche den Fokus hat, nur die fokussierte Schaltfläche gedrückt wird und das andere Ereignis nicht ausgelöst wird wahrscheinlich, was Sie erwarten, aber wollte nur diesen Punkt nach oben bringen. – ihatemash

+1

Ich denke, dass Verhalten absichtlich ist. Wenn diese Schaltfläche beispielsweise einen modalen Dialog öffnet und durch Drücken der Eingabetaste das Senden ausgelöst wird, möchten Sie nicht, dass beide Ereignisse ausgelöst werden. –

6

Weisen Sie das PreviewKeyDown Ereignis an das Fenster in XAML dann die KeyEventArgs in Code-Behind überprüfen, um festzustellen, ob der Benutzer die Enter-Taste gedrückt wird.

XAML-Code:

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

-Code hinter:

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

Entschuldigung, ich habe gerade bemerkt, dass du nicht gesagt hast, dass du einen Knopf auf dem Formular hast. Sie müssen eine Schaltfläche im Formular haben, bevor dies funktioniert. – ihatemash

+1

Falls nicht, füge einfach IsHitTestVisible = "true" zu den Fenstereigenschaften hinzu. – Guy

+0

Warnung: Dieses Ereignis wird bei jedem Steuerelement im Fenster ausgelöst, auch bei anderen Schaltflächen. Dies ist normalerweise kein Problem, es sei denn, Ihre Benutzer tippen das Formular um und verwenden die Eingabetaste, um auf Schaltflächen zu klicken. –

0

Ich fand, dass die DatePicker Steuerelement schlucken Geben Sie Tastendruck, so dass die Standardschaltfläche nicht geklickt wird. Ich habe diesen Event-Handler geschrieben, um das zu beheben. Verwenden Sie die PreviewKeyUp, um sicherzustellen, dass der DatePicker seinen Datumsformatierungscode vor dem Klicken auf die Standardschaltfläche ausführt.

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); 
    } 
} 
Verwandte Themen