2009-07-24 10 views
17

Was ist der beste Weg, um den Return-Schlüssel in einer PasswordBox zu fangen? (WPF/XAML)Was ist der beste Weg, um den Return-Key in einer PasswordBox zu fangen? (WPF/XAML)

Ich habe ein TextBox-Feld und ein PasswordBox-Feld auf meinem Login-Formular (für Benutzername und Passwort). Ich habe auch eine Login-Schaltfläche, die die Methode aufruft, die den Anmelde-Validierungsprozess durchführt.

Ich muss die Return-Taste, um die gleiche Art und Weise in der PasswordBox reagieren, so dass der Benutzer die Möglichkeit, ihren Benutzernamen und Kennwort eingeben und drücken Sie einfach Return eingeloggt sein.

Wer weiß, wie das ist in WPF gemacht? Jede Hilfe wird geschätzt.

Antwort

47

Es noch einfacher Mechanismus ist die Schaltfläche des Code zu aktivieren. WPF-Button-Klasse bietet eine Eigenschaft namens IsDefault. Wenn Sie auf "True" klicken, wenn Sie auf die Eingabetaste drücken, während einige Objekte im Fenster den Fokus haben, wird der Code des Klickereignisses der Schaltfläche automatisch ausgelöst. Dieser Mechanismus funktioniert wie ein Zauber mit der Passwortbox.

+0

Noch besser! Vielen Dank! – Giffyguy

+0

Danke Genau das, was ich brauchte! – rikket

+4

Beachten Sie, dass die Eigenschaften IsDefault, IsDefaulted und IsCancel in der Schaltflächenklasse in WinRT nicht implementiert sind. Enttäuschend. –

1

Sie könnten versuchen, einen RoutedCommand zu verwenden.

Sie können es in der Command-Eigenschaft der Schaltfläche festlegen.
Sie können den InputBindings Ihres Anmeldeformulars auch einen KeyGesture hinzufügen, um die Enter-Taste zu binden, um den RoutedCommand auszulösen.

Fügen Sie dann eine CommandBinding in den CommandBindings Ihres Anmeldeformulars hinzu, um den RoutedCommand an die Executed-Handler in Ihrem Code zu binden und Ihren Anmeldevalidierungsprozess auszuführen oder auszulösen.

+0

Klingt mächtig! Aber ist das wirklich der einfachste Weg, dies jetzt zu tun? Wenn ja - ich werde ein Ohr für Microsoft haben, Lemme sagen Sie ... – Giffyguy

+0

Hängt davon ab. Auf diese Weise haben Sie nur einen Handler in Ihrem Code statt zwei (ein für den Button, einen für die Passwortbox). Es ist flexibler und nicht so komplex wie es klingt. Es gibt nur zwei zusätzliche Schritte, die Sie nur einmal ausführen müssen: Definieren des RoutedCommand und Hinzufügen der CommandBinding. Der KeyGesture ähnelt dem Hinzufügen eines eventhandler zum passwordbox, für die Schaltfläche, die Sie anstelle des Click-Handlers einen Befehl festlegen. Aber Sie haben einen Punkt, es ist wahrscheinlich Overkill für ein einfaches Login-Formular. :) – Bubblewrap

4

Sie können das KeyDown-Ereignis auf dem PasswordBox behandeln (und TextBox falls gewünscht) und dann die folgenden Ereignishandler verwenden -

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

Das wird perfekt funktionieren, ich habe nur Probleme, die Ereignisse für verschiedene WPF-Steuerelemente verwendbar zu finden ... Danke! – Giffyguy

Verwandte Themen