Erstellen Sie einen einzelnen Schlüssel-Bindung, die Brände einen Befehl jedes Mal Steuerung mit einem beliebigen Anzahl gedrückt und übergibt dann die Zahl als Parameter?

StackOverflow https://stackoverflow.com/questions/2437289

Frage

Ich brauche Hot-Keys für jede Steuerung + Zahlenkombination zu schaffen und würde es vorziehen, nicht zehn Befehle erstellen zu lassen. Gibt es eine Möglichkeit, dies zu tun?

War es hilfreich?

Lösung

Wenn ich verstehe Ihre Frage, haben Sie einen einzigen Befehl, sagen MyCommand, und Sie wollen es feuern, wenn der Benutzer STRG drückt + 0 bis STRG + 9, und geben Sie den Befehl einen anderen Parameter für jede Kombination.

In diesem Fall erstellen nur 10 Tastenbelegungen in Ihrem Fenster, die alle an MyCommand gebunden, und gibt ihnen einen Parameter:

<Window.InputBindings>
    <KeyBinding Command="MyCommand" Gesture="Ctrl+0" CommandParameter="0"/>
    <KeyBinding Command="MyCommand" Gesture="Ctrl+1" CommandParameter="1"/>
    <KeyBinding Command="MyCommand" Gesture="Ctrl+2" CommandParameter="2"/>
    <KeyBinding Command="MyCommand" Gesture="Ctrl+3" CommandParameter="3"/>
    <KeyBinding Command="MyCommand" Gesture="Ctrl+4" CommandParameter="4"/>
    <KeyBinding Command="MyCommand" Gesture="Ctrl+5" CommandParameter="5"/>
    <KeyBinding Command="MyCommand" Gesture="Ctrl+6" CommandParameter="6"/>
    <KeyBinding Command="MyCommand" Gesture="Ctrl+7" CommandParameter="7"/>
    <KeyBinding Command="MyCommand" Gesture="Ctrl+8" CommandParameter="8"/>
    <KeyBinding Command="MyCommand" Gesture="Ctrl+9" CommandParameter="9"/>
</Window.InputBindings>

Andere Tipps

Ja, können Sie eine benutzerdefinierte KeyBinding erstellen, die dies tut. Der Code würde wie folgt aussehen:

[ContentProperty("Keys")]
public class MultiKeyBinding : InputBinding
{
  public ModifierKeys Modifiers;
  public List<Key> Keys = new List<Key>();

  private Gesture _gesture;

  public override InputGesture Gesture
  {
    get
    {
      if(_gesture==null) _gesture = new MultiKeyGesture { Parent = this };
      return _gesture;
    }
    set { throw new InvalidOperationException(); }
  }

  class MultiKeyGesture : InputGesture
  {
    MultiKeyBinding Parent;

    public override bool Matches(object target, InputEventArgs e)
    {
      bool match =
        e is KeyEventArgs &&
        Parent.Modifiers == Keyboard.Modifiers &&
        Parent.Keys.Contains( ((KeyEventArgs)e).Key );

      // Pass actual key as CommandParameter
      if(match) Parent.CommandParameter = ((KeyEventArgs)e).Key;

      return match;
    }
  }
}

Es wäre wie folgt verwendet werden:

<local:MultiKeyBinding Command="..." Modifiers="Control">
  <Key>D0</Key>
  <Key>D1</Key>
  ...
</local:MultiKeyBinding>

Hope, das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top