2016-07-04 2 views
0

J'utilise CommandBinding à RoutedUICommand dans mon application intensivement. La plupart d'entre eux ont des raccourcis clavier qui fonctionnent globalement.WPF RoutedUICommand: comment autoriser à 'saisir' une clé enregistrée en tant que raccourci?

Pour certaines des commandes, je voudrais avoir des raccourcis à une touche, sans modificateurs - par exemple, le clavier '+' (Key.Add). Tout fonctionne correctement, sauf que lorsqu'un contrôle de saisie de texte (par exemple TextBox) est mis au point, la commande globale a toujours la priorité, consomme la clé et ne permet pas de la saisir, exécutant la commande à la place. Pourtant, je veux que la clé soit tapée dans de telles circonstances et que le raccourci de la commande soit bloqué.

Existe-t-il un moyen raisonnablement facile de réaliser cela?

Répondre

1

Dans votre délégué CanExecute, appelez la propriété Keyboard.FocusedElement, renvoyez false s'il n'est pas NULL. Théoriquement, cela devrait fonctionner. Si cela ne fonctionne pas, faites-le dans Execute delegate, et vérifiez cela et définissez e.Handled sur false.

+0

Non, les deux méthodes ne fonctionnent pas. La pression sur la touche est consommée même si 'CanExecute' est signalé comme faux ou' Executed' est signalé comme non géré. (En outre, 'Keyboard.FocusedElement' peut légitimement être réglé sur de nombreux autres éléments qui n'ont pas besoin de traiter la clé, par exemple' RadioButton'). Une solution de contournement que j'ai trouvé jusqu'ici consiste à lier la commande en question au panneau pertinent ou à un autre élément (TabItem dans mon cas) qui ne contient pas de champs modifiables, plutôt qu'à la totalité de la fenêtre ou de l'application. Ce n'est pas une solution universelle, mais peut fonctionner dans la plupart des cas pratiques. – Zeus