Laden...

Wie kann ich Key-Events userabhängig machen?

Erstellt von flar2000 vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.190 Views
F
flar2000 Themenstarter:in
6 Beiträge seit 2018
vor 5 Jahren
Wie kann ich Key-Events userabhängig machen?

Hallo liebe Community,
Ich hoffe ich bin hier in der richtigen Abteilung und habe nicht ein falsches Themengebiet ausgesucht.
Nun zu meiner Frage...
Ich habe eine Fernsteuerung in meiner WPF-Application mit insgesamt 12 Buttons (tut eigentlich nix zur Sache) nun will ich diese Buttons von einer Taste abhängig machen... Soweit komme ich ja jedoch soll diese Taste vom Benutzer ausgewählt werden können. Also mittels rechts Klick im Kontextmenü wählt er die Funktion Befehlstaste ändern und die Taste die er in den nächsten 10 Sekunden drückt dient ab diesem Moment zum Betätigen dieser Taste...

Kann mir jemand sagen wie ich es schaffe diese vom Benutzerausgewählten Tasten mit dem richtigen Button zu verbinden...

Vielen Dank schon mal im vorraus....

2.079 Beiträge seit 2012
vor 5 Jahren

Du könntest jeden einzelnen Tastendruck abfangen und nach Prüfung der gedrückten Taste entsprechend reagieren.
Schau dir dazu mal die Keyboard-Klasse an.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

5.658 Beiträge seit 2006
vor 5 Jahren

Hi flar2000,

dafür gibt es KeyBindings.

Weeks of programming can save you hours of planning

2.079 Beiträge seit 2012
vor 5 Jahren

@MrSparkle:

Ich persönlich finde die ein bisschen zu unflexibel.
Im Prinzip müsste man bei einer konfigurierbaren Tastatur-Belegung jedes Mal an der richtigen Stelle die KeyBindings entfernen und neu erstellen.

Viel lieber wäre mir dagegen eine Klasse wie Diese:

public class MyKeyBinding : IDisposable
{
    private DependencyObject _element;

    public event EventHandler UpKey;
    public event EventHandler LeftKey;
    public event EventHandler RightKey;
    public event EventHandler DownKey;

    public MyKeyBinding(DependencyObject element)
    {
        _element = element ?? throw new ArgumentNullException(nameof(element));
        Keyboard.AddKeyDownHandler(_element, OnKeyDown);
    }

    private void OnKeyDown(object sender, KeyEventArgs e)
    {
        switch (e.Key)
        {
            case Key.W: UpKey?.Invoke(this, EventArgs.Empty); break;
            case Key.A: LeftKey?.Invoke(this, EventArgs.Empty); break;
            case Key.D: RightKey?.Invoke(this, EventArgs.Empty); break;
            case Key.S: DownKey?.Invoke(this, EventArgs.Empty); break;
            default: break;
        }
    }

    public void Dispose()
    {
        Keyboard.RemoveKeyDownHandler(_element, OnKeyDown);
        _element = null;
    }
}

Das ist natürlich nur ein sehr einfaches Beispiel. Das Ziel wäre eher, dass das in einem eigenen ViewModel passiert, was dann je nach Einstellung auf andere Keys reagieren kann. Wie man das konkret macht, sei Mal dahin gestellt, mir ging's dabei nur um die Idee.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

5.658 Beiträge seit 2006
vor 5 Jahren

Wenn es konfiguriertbar sein soll, kann man auch KeyBinding.Gesture an eine Eigenschaft im ViewModel binden.

Weeks of programming can save you hours of planning