none
在Win10 系统上运行WPF程序,从可视屏幕外向屏幕内向上方向滑动的事件如何监听? RRS feed

  • 问题

  • 如题。

    我的程序用WPF开发,运行在安装了win10系统的可触摸设备(Surface )上,我想监听从触摸屏外层的那个下部分向上滑动的事件,请问有什么可行的方法或者思路吗?


    2016年5月17日 12:14

答案

  • 我补充一点,首先要保证你的WPF窗口是无边框+最大化的。其次触摸屏外的触摸事件肯定是不可能有啦,所以唯一的办法就是在手指滑到触摸屏范围内的时候开始监测。

    你可以在TouchDown的时候做一下判断,如果在屏幕下方5%的范围内就可以认定是从屏幕外划进来的。

    为什么是5%呢,因为很多超极本触摸屏的质量并不好(比如做工问题、边框太宽),或者出现手指太大误触之类的情况,在手指划进来的时候,可能要2-3%的地方才会产生触摸事件,设置成5%会确保所有划入的操作被识别出来。



    共同努力,共同提高
    kaedei#live.cn My BLOG

    2016年5月18日 2:45
  • 您好 Calvin Hao,

    >>"从可视屏幕外向屏幕内向上方向滑动的事件如何监听?"

    在WPF中处理触摸滑动的事件是TouchMove。您想要实现的逻辑重点是两个方面,一个是滑动的起始点,第二个是滑动的方向。滑动的起始点我们可以在TouchDown事件中获得,并可以拿它和触摸屏最下面的点进行比较。滑动的方向我们可以在TouchMove事件中找到最新的触摸点,并和之前的触摸点进行比较,如果最新的触摸点的纵向位置比上一个触摸点的纵向位置小的话,说明滑动的方向是向上滑动。以下代码供您参考。

    Point startPoint;
    Point previousPoint;
    
    private void Window_TouchDown(object sender, TouchEventArgs e)
    {
        //获取起始点
        startPoint = e.GetTouchPoint(this).Position;
        previousPoint = startPoint;
    }
    
    private void Window_TouchMove(object sender, TouchEventArgs e)
    {
        Point currentPoint = e.GetTouchPoint(this).Position;
        if (currentPoint.Y < previousPoint.Y)
        {
            //向上滑动
        }
        else
        {
            //向下滑动
        }
    }
    
    private void Window_TouchUp(object sender, TouchEventArgs e)
    {
    
    }
    Best Regards,
    Li Wang

    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2016年5月18日 2:33

全部回复

  • 您好 Calvin Hao,

    >>"从可视屏幕外向屏幕内向上方向滑动的事件如何监听?"

    在WPF中处理触摸滑动的事件是TouchMove。您想要实现的逻辑重点是两个方面,一个是滑动的起始点,第二个是滑动的方向。滑动的起始点我们可以在TouchDown事件中获得,并可以拿它和触摸屏最下面的点进行比较。滑动的方向我们可以在TouchMove事件中找到最新的触摸点,并和之前的触摸点进行比较,如果最新的触摸点的纵向位置比上一个触摸点的纵向位置小的话,说明滑动的方向是向上滑动。以下代码供您参考。

    Point startPoint;
    Point previousPoint;
    
    private void Window_TouchDown(object sender, TouchEventArgs e)
    {
        //获取起始点
        startPoint = e.GetTouchPoint(this).Position;
        previousPoint = startPoint;
    }
    
    private void Window_TouchMove(object sender, TouchEventArgs e)
    {
        Point currentPoint = e.GetTouchPoint(this).Position;
        if (currentPoint.Y < previousPoint.Y)
        {
            //向上滑动
        }
        else
        {
            //向下滑动
        }
    }
    
    private void Window_TouchUp(object sender, TouchEventArgs e)
    {
    
    }
    Best Regards,
    Li Wang

    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2016年5月18日 2:33
  • 我补充一点,首先要保证你的WPF窗口是无边框+最大化的。其次触摸屏外的触摸事件肯定是不可能有啦,所以唯一的办法就是在手指滑到触摸屏范围内的时候开始监测。

    你可以在TouchDown的时候做一下判断,如果在屏幕下方5%的范围内就可以认定是从屏幕外划进来的。

    为什么是5%呢,因为很多超极本触摸屏的质量并不好(比如做工问题、边框太宽),或者出现手指太大误触之类的情况,在手指划进来的时候,可能要2-3%的地方才会产生触摸事件,设置成5%会确保所有划入的操作被识别出来。



    共同努力,共同提高
    kaedei#live.cn My BLOG

    2016年5月18日 2:45