(双击)WPF中的触地事件?

(双击)WPF中的触地事件?,wpf,Wpf,我需要在WPF 类似于鼠标按下事件中的双击 if (e.ClickCount == 2) ; 有什么建议吗?我找到了解决办法 private readonly Stopwatch _doubleTapStopwatch = new Stopwatch(); private Point _lastTapLocation; public static double GetDistanceBetweenPoints(Point p, Point q)

我需要在
WPF

类似于鼠标按下事件中的双击

if (e.ClickCount == 2) ;
有什么建议吗?

我找到了解决办法

private readonly Stopwatch _doubleTapStopwatch = new Stopwatch();
        private Point _lastTapLocation;

        public static double GetDistanceBetweenPoints(Point p, Point q)
        {
            double a = p.X - q.X;
            double b = p.Y - q.Y;
            double distance = Math.Sqrt(a * a + b * b);
            return distance;
        }
        private bool IsDoubleTap(TouchEventArgs e)
        {
            Point currentTapPosition = e.GetTouchPoint(this).Position;
            bool tapsAreCloseInDistance = GetDistanceBetweenPoints(currentTapPosition, _lastTapLocation) < 40;
            _lastTapLocation = currentTapPosition;

            TimeSpan elapsed = _doubleTapStopwatch.Elapsed;
            _doubleTapStopwatch.Restart();
            bool tapsAreCloseInTime = (elapsed != TimeSpan.Zero && elapsed < TimeSpan.FromSeconds(0.7));

            return tapsAreCloseInDistance && tapsAreCloseInTime;
        }

  private void Close_OnTouchDown(object sender, TouchEventArgs e)
        {

            if(IsDoubleTap(e)) 
                //Do somthing;
         }
private readonly秒表_doubleTapStopwatch=new Stopwatch();
私人点(最新位置);;
公共静态双GetDistanceBetweenPoints(点p、点q)
{
双a=p.X-q.X;
双b=p.Y-q.Y;
双距离=数学Sqrt(a*a+b*b);
返回距离;
}
私人bool IsDoubleTap(TouchEventArgs e)
{
点电流位置=e.GetTouchPoint(此).Position;
bool tapsarecloseincidence=获取点之间的距离(当前TapPosition,_lastTapLocation)<40;
_lastTapLocation=当前TapLocation;
TimeSpan Appeased=\u doubleTapStopwatch.appeased;
_双击秒表。重新启动();
bool-tapsAreCloseInTime=(已用!=TimeSpan.Zero和已用

reference

如果您不介意Rx/system.reactive,则应使用
SystemInformation.DoubleClickTime
SystemInformation.DoubleClickSize
,而不是硬编码用于检查轻敲的距离值和轻敲之间的持续时间。更多信息请访问