我正在为Windows 8平板电脑开发一个应用程序。我订阅了TouchDown和StylusDown事件。问题是,当我用手指触摸时,两个事件都会发生。TouchDown首先出现,然后是StylusDown。当我用触控笔触摸时,只有StylusDown发生。
这是所有平板电脑的正常行为吗?还是只针对某些型号?
我找不到任何关于这个的文件
这是WPF中所有触摸事件的标准流程。如果TouchDown事件没有被标记为已处理,它将作为StylusDown触发,然后作为MouseDown触发。您可以通过处理事件来停止此操作,例如如下所示:
protected override void OnTouchDown( TouchEventArgs e )
{
// your code here
e.Handled = true;
}
设计WPF时,没有太多触控或触控笔设备。为了保持旧的应用程序响应新的输入设备,如触摸屏或触控笔,他们的事件被转换如下(如果它没有被标记为已处理):
- 触摸设备:手写笔>联系在鼠标
- 触控笔设备:Stylus>鼠标
问题开始时,你想处理每个输入设备事件只有当它来自其相应的真实设备,例如处理触控笔事件只有当它来自一个真正的触控笔设备,而不是从触摸设备,等。
对于Touch事件,没有什么特别需要的,因为它只由真正的触摸设备触发。
在鼠标事件的情况下,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);
}