2011-01-09 11 views
4

Grundsätzlich möchte ich eine Tastenkombination erstellen, die innerhalb des Bereichs eines Fensters gültig ist, und nicht nur aktiviert, wenn der Fokus innerhalb des Steuerelements liegt, das es bindet.Befehlsrouting für Tastaturkürzel

näher ....

Ich habe ein Fenster, das 3 steuert hat:

  • eine Symbolleiste
  • eine Textbox
  • ein

    Custom Control

Die Symbolleiste verfügt über eine Schaltfläche, die an den Befehl gebunden ist und mit der Tastatur sh verknüpft ist ortcut Strg + T.

Meine benutzerdefinierte Steuerung kann CmdA verarbeiten. Wenn ich die App starte und auf mein benutzerdefiniertes Steuerelement klicke, ist CmdA aktiviert und funktioniert einwandfrei. Auch Strg + T bewirkt, dass der Befehl ausgelöst wird. Wenn Sie das Textfeld auswählen, wird mein benutzerdefinierter Befehl CmdA deaktiviert.

Ich kann dies korrigieren, indem Sie das Befehlsziel für CmdA 's-Schaltfläche festlegen. Wenn ich nun die textBox anwähle, ist CmdA immer noch aktiviert.

Aber die Tastenkombination Ctrl + T tut nichts.

Gibt es eine einfache Möglichkeit, den Umfang der Tastaturkürzel zu ändern? Oder muss ich den Tastendruck irgendwo tiefer abtasten und herausfinden, auf welchen Befehl es sich bezieht und es selbst route (wenn ja, gibt es dafür einen Rahmen?)

Antwort

2

Dafür müssen Sie normalerweise nur angeben die Eingabebindungen in dem Fenster, zum Beispiel: wie gut

<Window.InputBindings> 
     <KeyBinding Key="N" Modifiers="Control" Command="New"/> 
     ... 
</Window.InputBindings> 

Für integrierte Anwendungsbefehle (die RoutedCommands sind) Sie CommandBinding im Fenster müssen.

<Window.CommandBindings> 
     <CommandBinding Command="New" Executed="CommandBinding_Executed" /> 
     ... 
</Window.CommandBindings> 
+0

Dank H.B, aber dies würde den „neuen“ Befehl an den „CommandBinding_Executed“ -Funktion bindet im Code des Fensters implmented hinter. Allerdings muss die Benutzersteuerung damit umgehen. Dies ist eher ein Problem, da das Benutzersteuerelement dynamisch erstellt wird und ich nicht weiß, welche von etwa 100 benutzerdefinierten Befehlen es verarbeiten kann. – Sprotty