Ich versuche, Button zu erweitern, um ein Rechtsklick-Ereignis hinzuzufügen.
Mein Kunde möchte, dass ein Button je nach Linksklick oder Rechtsklick verschiedene Dinge tut. Ich hatte erwartet, dass es ein einfaches Ereignis für Rechtsklick gibt, aber anscheinend gibt es keins.
Ich möchte, dass das visuelle Verhalten des Buttons identisch mit dem bereits vorhandenen Klick-Ereignis ist, aber das gestaltet sich schwierig. Der Button hat viele grafische Verhaltensweisen, die auftreten, wenn man auf den Button klickt und daraufhin zieht.
- Wenn Sie klicken, wird der Button heruntergedrückt. Wenn Sie den heruntergedrückten Button ziehen, wird er wieder angehoben (d. h. nicht mehr heruntergedrückt). Andere Buttons, über die Sie ziehen, ignorieren dies.
- Wenn Sie wieder auf den ursprünglichen Button ziehen, wird er erneut heruntergedrückt.
- Wenn Sie den Button verlassen und dann loslassen, sollte der Zustand des ursprünglichen Buttons zurückgesetzt werden (d. h. Sie können nicht erneut darauf klicken und ziehen).
Diese kleinen grafischen Eigenheiten sehen unsauber aus, wenn die Linksklick-Visuals nicht mit den Rechtsklick-Visuals übereinstimmen.
Aktuell bleibe ich in diesem Punkt stecken: Wenn Sie mit Rechtsklick auf den Button klicken und dann ziehen, wie erkenne ich, wenn der Benutzer den Klick löst? Ich muss das wissen, damit ich weiß, dass der Button bei erneutem Betreten nicht erneut heruntergedrückt werden soll.
Eine allgemeinere Frage: Bin ich überhaupt auf dem richtigen Weg? Ich konnte niemanden finden, der das schon einmal gemacht hat. Mein Code befindet sich unten.
public class RightClickButton : Button
{
public event RoutedEventHandler RightClick;
public RightClickButton()
{
this.MouseRightButtonDown += new System.Windows.Input.MouseButtonEventHandler(RightClickButton_MouseRightButtonDown);
this.MouseRightButtonUp += new System.Windows.Input.MouseButtonEventHandler(RightClickButton_MouseRightButtonUp);
this.MouseEnter += new System.Windows.Input.MouseEventHandler(RightClickButton_MouseEnter);
this.MouseLeave += new System.Windows.Input.MouseEventHandler(RightClickButton_MouseLeave);
}
void RightClickButton_MouseRightButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
this.IsPressed = true;
}
void RightClickButton_MouseRightButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
this.IsPressed = false;
if (RightClick != null)
RightClick.Invoke(this, e);
}
void RightClickButton_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
{
if (this.IsPressed)
this.IsPressed = false;
}
void RightClickButton_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
{
if (this.IsFocused && Mouse.RightButton == MouseButtonState.Pressed)
this.IsPressed = true;
}
}