Comment puis-je attribuer le " Fermer à Échapper à la-touche, appuyez sur le comportement de tous WPF, windows au sein d'un projet?
Est-il un moyen simple de raconter toute l'application WPF à réagir pour Échapper à la pression des touches en essayant de fermer la concentre actuellement veuve? Ce n'est pas une grande peine pour configurer manuellement la commande d'entrée et de liaisons, mais je me demande si la répétition de cette XAML dans toutes les fenêtres est le plus élégant approche?
<Window.CommandBindings>
<CommandBinding Command="Close" Executed="CommandBinding_Executed" />
</Window.CommandBindings>
<Window.InputBindings>
<KeyBinding Key="Escape" Command="Close" />
</Window.InputBindings>
Toutes les suggestions constructives sont les bienvenues!
- Question similaire ici : stackoverflow.com/questions/7691713/...
Vous devez vous connecter pour publier un commentaire.
Tout ce que je peux suggérer à améliorer, c'est pour éliminer le besoin d'un gestionnaire d'événement par la liaison statique instance de commande.
Remarque: cela ne fonctionne que dans .NET 4 ans car elle nécessite la capacité à se lier à la
KeyBinding
propriétés.Tout d'abord, créez une commande qui prend une Fenêtre comme un paramètre et les appels
Close
dans leExecute
méthode:Ensuite, vous pouvez lier votre
KeyBinding
de la statiqueInstance
propriété:Je ne sais pas que c'est nécessairement mieux que votre approche, mais cela ne signifie légèrement moins réutilisable au sommet de chaque
Window
et que vous n'avez pas besoin d'inclure un gestionnaire d'événement dans chaqueEventHandler
?CanExecute
fonctionnalité vous protéger contre elle par avoirCanExecute
toujours retourner vrai et remplacer leCanExecuteChanged
gestionnaire vides attachement implémentations (par exemplepublic event EventHandler CanExecuteChanged { add {} remove {} }
)Ou vous pouvez simplement ajouter un bouton Annuler, selon le texte et les
IsCancel = True
. Puis Échapper à la volonté de travail en tant que par défaut la commande pour fermer.créer
RoutedUICommand
comme ci-dessouset l'ajouter liaison de commande dans le constructeur
Sur
Window
s montré avecShowDialog()
vous pouvez utiliser:Vous pouvez également utiliser PreviewKeyDown Événement
Code derrière vous appeler la commande de fermeture
Une autre voie possible est d'utiliser des propriétés attachées
Soufflet est un résumé de l'information code:
HTML:
Aucun des ci-dessus a fonctionné pour moi, à l'exception de Kai.
J'ai modifié sa réponse: j'ai ajouté 'btn_close.IsCancel = true;' pour le constructeur. SettingsWindow est mon deuxième fenêtre et de la fenêtre principale (par défaut) MainWindow.
Espérons que cela aide,
Simon
S amour nia