基于设备

时间:2016-07-14 17:46:34

标签: c# .net wpf

我有一个面板,包含两种类型的元素 MouseArea TouchArea ,当用户移动光标或点击时(使用鼠标)在TouchArea上我不希望在面板上触发任何鼠标事件(如MouseEnterMouseLeaveMouseMove

我现在正在做的方式是覆盖 TouchArea 中的HitTestCore,问题是我不知道是否有任何其他方法来确定用户是否正在使用除了查看Environment.StackTrace之外的鼠标或手写笔,这看起来非常糟糕。

protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters)
{
    if (Environment.StackTrace.Contains("Stylus"))
    {
        return base.HitTestCore(hitTestParameters);
    }
    return null;
}

所以主要的问题是如何判断客户端在FrameworkElement中使用了什么,或者如果这样的事情不可能,还有另一种方法可以根据所使用的输入设备忽略事件。

1 个答案:

答案 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.MostRecentInputDevicenull,并且只会更新MouseDownTouchDown等事件,而不是MouseEnter或{{1 }}

相关问题