private async void OnPreviewPress(object sender, RoutedEventArgs e) { if (!IsEnabled) { return; } if (firstMouseDownHash == -1) { firstMouseDownHash = GetHashCode(); IsPressedInternal = true; if (e is MouseButtonEventArgs) { PreviewMouseLeftButtonDown?.Invoke(sender, e as MouseButtonEventArgs); } else if (e is TouchEventArgs) { PreviewTouchDown?.Invoke(sender, e as TouchEventArgs); } PressHold?.Invoke(this, new PressHoldEventArgs(PressHoldEventArgs.EventType.Press)); if (LongPressEnabled) { var longPressMSec = LongPressDelay.TotalMilliseconds; var longPressStep = 10; var longPressStepDelay = longPressMSec / longPressStep; while (longPressMSec > 0) { if (firstMouseDownHash == -1) { break; } await Task.Delay(TimeSpan.FromMilliseconds(longPressStepDelay)); longPressMSec -= longPressStepDelay; } if (firstMouseDownHash == GetHashCode()) { ReleaseAllTouchCaptures(); ReleaseMouseCapture(); firstMouseDownHash = -1; LongPress?.Invoke(this, e); IsPressedInternal = false; e.Handled = true; } } } }
protected void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e) { PreviewMouseLeftButtonDown?.Invoke(this, e.ToMouseButtonEventArgsInt(MouseButton.Left, MouseButtonState.Pressed)); }