【问题标题】:Strategy for differentiating TouchUp from TouchLeave, and TouchDown from TouchEnter?区分 TouchUp 与 TouchLeave 以及 TouchDown 与 TouchEnter 的策略?
【发布时间】:2012-02-11 01:02:09
【问题描述】:

对于描述的基本场景in the msdn overview (under Touch and Manipulation) TouchEnter 和 TouchLeave 分别为每个对应的 TouchDown 和 TouchUp 触发。与鼠标不同,Touch 和 Stylus 不受限制与屏幕保持接触。

有没有一种使用 TouchEnter 和 TouchLeave 的方法是仅在手指拖动进入 UIElement 时捕获。由于每次 touchUp 和 touchDown 都会触发这些事件,区分这些事件的最佳方法是什么?

一种适用于单指情况的策略是在 TouchDown 上设置一个标志,并检查该标志是否在 TouchUp 上设置。这允许对 TouchUp 进行一些条件检查。但是,对于多个手指,这是不可行的。

没有触发 PreviewTouchEnter 和 PreviewTouchLeave 事件,只有 PreviewTouchDown 和 PreviewTouchUp。手指放在 UIElement 上然后抬起的事件顺序如下:

  1. 触摸回车
  2. PreviewTouchDown
  3. 触地
  4. 预览修饰
  5. 修饰
  6. 触摸离开

此序列无助于区分由于手指在屏幕上拖动到 UIElement 中而发生的 TouchEnter 与直接放在 UIElement 上的手指。是我遗漏了什么,还是框架本身不支持这种差异化?

【问题讨论】:

    标签: wpf c#-4.0 touch multi-touch


    【解决方案1】:

    您能否使用TouchDevice 类来跟踪生成触摸的位置。新的触摸被赋予一个新的 ID,因此您可以区分现有的触摸和新的触摸,以及哪些元素正在捕获设备。我想这绕过了操纵事件和正常过程,但我希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      如果您为该事件检索TouchPoint,则其上有一个名为Action 的属性,它会告诉您它是DownMove 还是Up 事件。

      void m_element_TouchEnter(object sender, System.Windows.Input.TouchEventArgs e)
      {
          var touchPoint = e.GetTouchPoint(m_someElement);
      
          if (touchPoint.Action == System.Windows.Input.TouchAction.Move)
          {
              //This is a "true" TouchEnter event
          }
          else if (touchPoint.Action == System.Windows.Input.TouchAction.Down)
          {
              //This is a "true" TouchDown event.
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-31
        • 1970-01-01
        • 2017-01-22
        • 2014-11-01
        • 2021-02-16
        • 2014-10-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多