我有一个面板,包含两种类型的元素 MouseArea 和 TouchArea ,当用户移动光标或点击时(使用鼠标)在TouchArea上我不希望在面板上触发任何鼠标事件(如MouseEnter
,MouseLeave
或MouseMove
)
我现在正在做的方式是覆盖 TouchArea 中的HitTestCore
,问题是我不知道是否有任何其他方法来确定用户是否正在使用除了查看Environment.StackTrace
之外的鼠标或手写笔,这看起来非常糟糕。
protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters)
{
if (Environment.StackTrace.Contains("Stylus"))
{
return base.HitTestCore(hitTestParameters);
}
return null;
}
所以主要的问题是如何判断客户端在FrameworkElement
中使用了什么,或者如果这样的事情不可能,还有另一种方法可以根据所使用的输入设备忽略事件。
答案 0 :(得分:0)
显然你可以从我System.Windows.Input.InputManager
得到的最后一个输入设备:
protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters)
{
if (InputManager.Current.MostRecentInputDevice is StylusDevice)
{
return base.HitTestCore(hitTestParameters);
}
return null;
}
现在控件仅在使用触控设备时才有效。
请注意,默认情况下,InputManager.Current.MostRecentInputDevice
为null
,并且只会更新MouseDown
或TouchDown
等事件,而不是MouseEnter
或{{1 }}