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?
-
19-09-2019 - |
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?
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