我正在为装有 Windows 8 的平板电脑开发应用程序。我正在订阅 TouchDown 和 StylusDown 事件。问题是 - 当我用手指触摸时,两个事件都会发生。首先是 TouchDown,然后是 StylusDown。当我用手写笔触摸时,只会出现 StylusDown。
这是所有平板电脑的正常行为吗?还是特定于某些型号?
我找不到任何有关此的文件。
这是 WPF 中所有触摸事件的标准流程。如果 TouchDown 事件未标记为已处理,它将作为 StylusDown 触发,然后作为 MouseDown 触发。您可以通过处理事件来停止此操作,例如以下:
protected override void OnTouchDown( TouchEventArgs e )
{
// your code here
e.Handled = true;
}
在设计 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);
}