private void Down(MouseButtonEventArgs e) { bool onlyCtrl = Keyboard.Modifiers == ModifierKeys.Control; bool onlyShift = Keyboard.Modifiers == ModifierKeys.Shift; bool sourceIsThumb = ((e.OriginalSource as FrameworkElement).TemplatedParent) is Thumb; Point sheetPoint = e.GetPosition(_sheetController.State.OverlaySheet.GetParent() as FrameworkElement); ImmutablePoint sheetPosition = new ImmutablePoint(sheetPoint.X, sheetPoint.Y); Point rootPoint = e.GetPosition(this); ImmutablePoint rootPosition = new ImmutablePoint(rootPoint.X, rootPoint.Y); var args = new InputArgs() { OnlyControl = onlyCtrl, OnlyShift = onlyShift, SourceType = sourceIsThumb ? ItemType.Thumb : ItemType.None, SheetPosition = sheetPosition, RootPosition = rootPosition, Handled = (handled) => e.Handled = handled, Delta = 0, Clicks = e.ClickCount }; switch (e.ChangedButton) { case MouseButton.Left: args.Button = InputButton.Left; break; case MouseButton.Middle: args.Button = InputButton.Middle; break; case MouseButton.Right: args.Button = InputButton.Right; break; default: args.Button = InputButton.None; break; } _sheetController.Down(args); }