Wie kann ich bestimmen, welche Maustaste das Klickereignis in WPF angehoben hat?

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

  •  13-09-2019
  •  | 
  •  

Frage

Ich habe einen Knopf, den ich auslöste OnClick Wann immer es auf diese Schaltfläche klickt. Ich würde gerne wissen, welche Maustaste auf diese Schaltfläche geklickt haben?

Wenn ich das benutze Mouse.LeftButton oder Mouse.RightButton, beide sagen es mir "realiert"Welches sind ihre Zustände nach dem Klick.

Ich möchte nur wissen, welches auf meine Schaltfläche geklickt hat. Wenn ich mich ändere EventArgs zu MouseEventArgs, Ich erhalte Fehler.

Xaml: <Button Name="myButton" Click="OnClick">

private void OnClick(object sender, EventArgs e)
{
//do certain thing. 
}
War es hilfreich?

Lösung

Wenn Sie nur das Klickereignis der Schaltfläche verwenden, ist die einzige Maustaste, die abfängt, die primäre Maustaste.

Wenn Sie immer noch genau wissen müssen, ob es sich um die linke oder rechte Taste handelte, können Sie die SystemInformation verwenden, um sie zu erhalten.

void OnClick(object sender, RoutedEventArgs e)
    {
        if (SystemParameters.SwapButtons) // Or use SystemInformation.MouseButtonsSwapped
        {
            // It's the right button.
        }
        else
        {
            // It's the standard left button.
        }
    }

Bearbeiten: Das WPF -Äquivalent zur SystemInformation besteht aus Systemparametern, die stattdessen verwendet werden können. Sie können zwar system.windows.forms als Verweis einbezogen, um die SystemInformation zu erhalten, ohne die Anwendung in irgendeiner Weise nachteilig zu bewirken.

Andere Tipps

Sie können wie unten wie unten besetzen:

MouseEventArgs myArgs = (MouseEventArgs) e;

Und dann erhalten Sie die Informationen mit:

if (myArgs.Button == System.Windows.Forms.MouseButtons.Left)
{
    // do sth
}

Die Lösung funktioniert in VS2013 und Sie müssen das Mouseclick -Event nicht mehr verwenden;)

Sie haben Recht, Jose, es ist mit Mouseclick -Event. Aber Sie müssen einen kleinen Delegierten hinzufügen:

this.button1.mouseDown += neues System.Windows.Forms.MouseEventHandler (this.mymouSedouwn);

Und verwenden Sie diese Methode in Ihrem Formular:

    private void MyMouseDouwn(object sender, MouseEventArgs e) 
    {
        if (e.Button == MouseButtons.Right)
           this.Text = "Right";

        if (e.Button == MouseButtons.Left)
            this.Text = "Left";
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top