【问题标题】:StylusDown event comes after TouchDownStylusDown 事件发生在 TouchDown 之后
【发布时间】:2013-04-15 08:47:54
【问题描述】:

我正在为装有 Windows 8 的平板电脑开发应用程序。 我订阅了 TouchDown 和 StylusDown 事件。问题是 - 当我用手指触摸时,两个事件都会发生。首先是 TouchDown,然后是 StylusDown。 当我用手写笔触摸时,只会出现 StylusDown。

这是所有平板电脑的正常行为吗?还是特定于某些型号?

我找不到任何关于此的文件。

【问题讨论】:

  • 嗨 - 对不起,我不知道你的问题,但我只是想让你知道“stylus”标签是用于 css 预处理器的。谢谢! :)

标签: wpf touch tablet-pc


【解决方案1】:

这是 WPF 中所有触摸事件的标准流程。如果 TouchDown 事件未标记为已处理,它将作为 StylusDown 触发,然后作为 MouseDown 触发。您可以通过处理事件来停止这种情况,例如:

protected override void OnTouchDown( TouchEventArgs e )
{
    // your code here
    e.Handled = true;
}

【讨论】:

    【解决方案2】:

    在设计 WPF 时,周围并没有太多支持触控或触控笔的设备。为了让旧应用程序能够响应新的输入设备(例如触摸屏或触控笔),它们的事件将按如下方式进行转换(如果未标记为已处理):

    • 触控设备:触控笔 > 触控 > 鼠标
    • 触控笔设备:触控笔 > 鼠标

    当您希望仅在每个输入设备事件来自其对应的真实设备时处理每个输入设备事件时,问题就开始了,例如只有当它来自真正的手写笔设备而不是来自触摸设备等时才处理手写笔事件。

    在触摸事件的情况下,没有什么特别要求,因为它只由真正的触摸设备触发。

    在鼠标事件的情况下,可以使用 StylusDevice 属性:

            protected override void OnMouseDown(MouseButtonEventArgs e)
            {
                if (e.StylusDevice != null) return;
    
                // This is a real mouse event
    
                base.OnMouseDown(e);
            }
    

    如果是 Stylus 事件,可以使用 StylusDevice.TabletDevice.Type 属性:

            protected override void OnStylusButtonDown(StylusButtonEventArgs e)
            {
                if (e.StylusDevice.TabletDevice.Type != TabletDeviceType.Stylus) return;
    
                // This is a real stylus event
    
                base.OnStylusButtonDown(e);
            }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多