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));
 }