Hallo
wie der Titel schon verrät möchte ich auf ein Scrollen des Mausrads über einem Canvas reagieren.
Am besten alles was vor dem Edit kommt überspringen... Hab eine bessere Lösung gefunden...
__________________________________________________________________________________________
Jetzt gibt es da ja Folgendes:
Das wird, anders wie der Name schon sagt, nicht ausgelöst wenn man das MouseWheel klickt, sondern wenn man hoch- oder runterscrollt. Aber das nur nebenbei...
Das würde ja auch reichen für meine Zwecke, aber es wird leider kein Unterschied gemacht, ob man nun hoch- oder runterscrollt...
Also hab ich mal gegoogelt, das gab es zwar anscheinend Lösungen, aber die Links waren veraltet. Bis ich dann auf das hier gestossen bin:
Das scheint mir ja recht einfach zu sein, aber ich bin zu blöd, das in VB zu übersetzen, da das von mir bekannten Onlinekonvertern zum Fehler führt.
Insbesondere die Doppelpunkte, z.B. in Zeile 1, verwirren mich... Kennt sich jemand bissle damit aus und kann mir sagen, warum die Onlinekonverter nen Fehler bringen?
Oder hat jemand nen besseren Vorschlag, wie ich in MVVM zwischen Scroll-up and -down vom Mausrad unterscheiden kann?
_______________________________________________________________________________
EDIT: Hab doch noch was besseres gefunden, was funktioniert, nur verstehe ich den Code nicht:
Der Command wird nur ausgeführt, wenn man das Rad nach oben dreht... Aber wie gesagt ich verstehe die Klasse
wie der Titel schon verrät möchte ich auf ein Scrollen des Mausrads über einem Canvas reagieren.
Am besten alles was vor dem Edit kommt überspringen... Hab eine bessere Lösung gefunden...
__________________________________________________________________________________________
Jetzt gibt es da ja Folgendes:
Das wird, anders wie der Name schon sagt, nicht ausgelöst wenn man das MouseWheel klickt, sondern wenn man hoch- oder runterscrollt. Aber das nur nebenbei...
Das würde ja auch reichen für meine Zwecke, aber es wird leider kein Unterschied gemacht, ob man nun hoch- oder runterscrollt...
Also hab ich mal gegoogelt, das gab es zwar anscheinend Lösungen, aber die Links waren veraltet. Bis ich dann auf das hier gestossen bin:
C#-Quellcode
- public class MouseWheelGesture : MouseGesture
- {
- public MouseWheelGesture() : base(MouseAction.WheelClick)
- {
- }
- public MouseWheelGesture(ModifierKeys modifiers) : base(MouseAction.WheelClick, modifiers)
- {
- }
- public static MouseWheelGesture CtrlDown =>
- new(ModifierKeys.Control) { Direction = WheelDirection.Down };
- public WheelDirection Direction { get; set; }
- public override bool Matches(object targetElement, InputEventArgs inputEventArgs) =>
- base.Matches(targetElement, inputEventArgs)
- && inputEventArgs is MouseWheelEventArgs args
- && Direction switch
- {
- WheelDirection.None => args.Delta == 0,
- WheelDirection.Up => args.Delta > 0,
- WheelDirection.Down => args.Delta < 0,
- _ => false,
- };
- }
- public enum WheelDirection
- {
- None,
- Up,
- Down,
- }
Das scheint mir ja recht einfach zu sein, aber ich bin zu blöd, das in VB zu übersetzen, da das von mir bekannten Onlinekonvertern zum Fehler führt.
Insbesondere die Doppelpunkte, z.B. in Zeile 1, verwirren mich... Kennt sich jemand bissle damit aus und kann mir sagen, warum die Onlinekonverter nen Fehler bringen?
Oder hat jemand nen besseren Vorschlag, wie ich in MVVM zwischen Scroll-up and -down vom Mausrad unterscheiden kann?
_______________________________________________________________________________
EDIT: Hab doch noch was besseres gefunden, was funktioniert, nur verstehe ich den Code nicht:
VB.NET-Quellcode
- Option Strict On
- Imports System.Windows.Input
- Namespace mouse
- Public Class MouseWheelUp
- Inherits MouseGesture
- Public Sub New()
- MyBase.New(MouseAction.WheelClick)
- End Sub
- Public Sub New(ByVal modifiers As ModifierKeys)
- MyBase.New(MouseAction.WheelClick, modifiers)
- End Sub
- Public Overrides Function Matches(ByVal targetElement As Object, ByVal inputEventArgs As InputEventArgs) As Boolean
- If Not MyBase.Matches(targetElement, inputEventArgs) Then Return False
- If Not (TypeOf inputEventArgs Is MouseWheelEventArgs) Then Return False
- Dim args = CType(inputEventArgs, MouseWheelEventArgs)
- Return args.Delta > 0
- End Function
- End Class
- End Namespace
Der Command wird nur ausgeführt, wenn man das Rad nach oben dreht... Aber wie gesagt ich verstehe die Klasse
MouseWheelUp
nicht, so dass ich sie modifizieren könnte... Hat ja offensichtlich was mit den InputEventArgs zu tun... Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „kafffee“ ()