2009-07-24 5 views
17

Quelle est la meilleure façon d'attraper la clé de retour dans un PasswordBox? (WPF/XAML)Quel est le meilleur moyen de récupérer la clé de retour dans un PasswordBox? (WPF/XAML)

J'ai un champ TextBox et un champ PasswordBox sur mon formulaire de connexion (pour l'entrée du nom d'utilisateur et du mot de passe). J'ai également un bouton de connexion qui appelle la méthode qui effectue le processus de validation de connexion.

que je dois faire la clé de retour réagir de la même manière dans le PasswordBox, de sorte que l'utilisateur peut avoir l'option entrer leur nom d'utilisateur et mot de passe et appuyez simplement sur Retour pour vous connecter.

Est-ce que quelqu'un sait comment cela est fait dans WPF? Toute aide est appréciée.

Répondre

47

Il existe un mécanisme encore plus facile d'activer le code du bouton. La classe de boutons WPF fournit une propriété appelée IsDefault. Lorsque ce paramètre est défini sur true, si vous appuyez sur la touche retour alors que certains objets de la fenêtre sont actifs, le code de l'événement click du bouton sera automatiquement déclenché. Ce mécanisme fonctionne comme un charme avec la boîte de mot de passe.

+0

Encore mieux! Merci! – Giffyguy

+0

Merci exactement ce dont j'avais besoin! – rikket

+4

Juste à noter, les propriétés IsDefault, IsDefaulted et IsCancel ne sont pas implémentées sur la classe de boutons dans WinRT. Décevant. –

1

Vous pourriez essayer d'utiliser une commande RoutedCommand.

Vous pouvez le définir sur la propriété Command du bouton.
Vous pouvez également ajouter un KeyGesture aux InputBindings de votre formulaire de connexion pour lier la touche Entrée afin de déclencher votre RoutedCommand.

Puis ajoutez un CommandBinding dans les CommandBindings de votre formulaire de connexion pour lier le RoutedCommand aux gestionnaires exécutés dans votre code et exécuter ou déclencher votre processus de validation de connexion.

+0

Semble puissant! Mais est-ce vraiment la façon la plus simple de le faire, maintenant? Si oui, je vais avoir une oreille pour Microsoft, laissez-moi vous dire ... – Giffyguy

+0

Depends. De cette façon, vous n'avez qu'un seul gestionnaire dans votre code au lieu de deux (pour le bouton, un pour le mot de passe). C'est plus flexible et pas aussi complexe que cela puisse paraître. Il n'y a que deux étapes supplémentaires à faire une seule fois: définir la RoutedCommand et ajouter la CommandBinding. Le KeyGesture est semblable à l'ajout d'un gestionnaire d'événements à la boîte de mot de passe, pour le bouton que vous avez défini une commande au lieu du gestionnaire Click. Mais vous avez un point, c'est probablement exagéré pour un formulaire de connexion simple. :) – Bubblewrap

4

Vous pouvez gérer l'événement KeyDown sur le PasswordBox (et TextBox si on le souhaite), puis utilisez le gestionnaire d'événement suivant -

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

Cela fonctionnera parfaitement, j'ai juste du mal à trouver les événements utilisables pour différents contrôles WPF ... Merci! – Giffyguy

Questions connexes