Ich verwende CommandBinding
bis RoutedUICommand
in meiner Anwendung ausgiebig. Die meisten von ihnen haben Tastaturkürzel, die global funktionieren.WPF RoutedUICommand: Wie kann man einen Schlüssel eingeben, der als Verknüpfung registriert ist?
Für einige der Befehle würde ich gerne Tastenkombinationen ohne Tastenkombinationen haben - zum Beispiel die Tastatur '+' (Key.Add
). Dies alles funktioniert gut, außer dass, wenn ein Texteingabesteuerelement (z. B. TextBox
) fokussiert ist, der globale Befehl immer noch Vorrang hat, den Schlüssel konsumiert und nicht erlaubt, dass er eingegeben wird, indem stattdessen der Befehl ausgeführt wird. Trotzdem möchte ich unter solchen Umständen den Schlüssel eingeben und die Befehlsverknüpfung blockieren.
Gibt es eine relativ einfache Möglichkeit, das zu erreichen?
Nein, beide Wege funktionieren nicht. Der Tastendruck wird auch dann verbraucht, wenn 'CanExecute' falsch oder 'Executed' nicht Handled signalisiert wurde. (Außerdem kann 'Keyboard.FocusedElement' legitimerweise auf viele andere Elemente gesetzt werden, die den Schlüssel nicht verarbeiten müssen; z. B.' RadioButton'). Eine Problemumgehung, die ich bisher gefunden habe, besteht darin, den fraglichen Befehl an das relevante Panel oder ein anderes Element ('TabItem' in meinem Fall) zu binden, das keine editierbaren Felder enthält, und nicht das gesamte Fenster oder die Anwendung. Dies ist keine universelle Lösung, kann aber in den meisten Fällen funktionieren. – Zeus