StylusDown事件发生在TouchDown之后

时间:2013-04-22 12:37:21

标签: wpf touch tablet-pc

我正在使用Windows 8开发平板电脑的应用程序。 我正在订阅TouchDown和StylusDown活动。问题是 - 当我用手指触摸时,两个事件都会发生。 TouchDown排在第一位,然后是StylusDown。 当我用手写笔触摸时,只会发生StylusDown。

这是所有平板电脑的正常行为吗?或者某些型号是否具体?

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

在设计WPF时,周围没有太多具有触摸或手写笔功能的设备。为了使旧的应用程序能够对新的输入设备(例如触摸屏或手写笔)做出响应,其事件将按以下方式转换(如果未标记为已处理):

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

仅当您希望处理每个输入设备事件来自相应的真实设备时,问题才开始。仅当手写笔事件来自真正的手写笔设备而不是来自触摸设备等时才处理。

如果发生Touch事件,则不需要任何特殊操作,因为它仅由真实的触摸设备触发。

如果发生Mouse事件,则可以使用StylusDevice属性:

        protected override void OnMouseDown(MouseButtonEventArgs e)
        {
            if (e.StylusDevice != null) return;

            // This is a real mouse event

            base.OnMouseDown(e);
        }

在发生手写笔事件的情况下,可以使用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);
        }