【问题标题】:Touch/Mouse Event behavour with listbox in WPF and Windows 8WPF 和 Windows 8 中列表框的触摸/鼠标事件行为
【发布时间】:2013-02-08 14:03:08
【问题描述】:

当我尝试在 Windows 8 机器上的列表框中同时处理鼠标和触摸输入时,我遇到了我认为的意外行为(因为它不同于在 Windows 7 上运行相同的软件)。

这是我处理事件的函数/方法

Private Sub Drag_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Input.InputEventArgs) Handles lvItems.PreviewMouseDown, lvItems.PreviewTouchDown

当我让它同时处理鼠标和触摸输入时(PreviewTouchDownPreviewMouseDown),即使我在 TouchEventArgs 上为首先引发的事件。

如果我从事件处理程序中删除对 PreviewTouchDown 事件的处理,我将不会收到 PreviewMouseDown 事件。

我需要的是每次触摸/点击只调用一次该方法。我无法删除 PreviewMouseDown,因为它不仅用于触摸屏。为单次触摸同时传递触摸事件和鼠标事件会破坏我们的功能。

在 Windows 7 上,我只接收到触摸事件,因为我设置了handled=true,所以鼠标事件被取消了。

【问题讨论】:

  • 为什么不把所有的功能都放在PreviewMouseDown 中,然后把PreviewTouchDown 作为存根留在那里让PreviewMouseDown 触发呢?不理想,但如果您无法找出问题所在,这是一种可能的解决方法。

标签: wpf vb.net windows-8 mouseevent touch-event


【解决方案1】:

在 Windows 8 上,触摸事件可以升级为鼠标事件。这有时很方便,因为它允许我在 Win8(不是在 Win7 下)中使用触摸打开一个组合框,但有时这是不受欢迎的,正如您也发现的那样。另请参阅 JoshB's article 以获得更准确的解释。

在我的例子中,我在鼠标事件处理程序中检查了 e.StylusDevice == null (当处理鼠标时,它是 null,而不是在处理触摸事件时)。也许这对你也有帮助?

例如,我制作了一个 ZoomGrid,它既可以听鼠标也可以听触摸。在 Windows 7 下,没有问题,但在 Windows 8 下,触摸移动后也触发了平移行为。检查 e.StylusDevice != null 修复了它。

    private void MainGridMouseMove(object sender, MouseEventArgs e)
    {
        if (e.LeftButton != MouseButtonState.Pressed) return;
        if (!isDraggingBackground || e.StylusDevice != null) return;
        var curPosition = e.GetPosition(sender as UIElement);
        var delta = curPosition - startPosition;
        var rectsMatrix = ((MatrixTransform)RenderTransform).Matrix;
        rectsMatrix.Translate(delta.X, delta.Y);
        Offset = new Point(rectsMatrix.OffsetX, rectsMatrix.OffsetY);
        RenderTransform = new MatrixTransform(rectsMatrix);
        e.Handled = true;
    }

【讨论】:

    【解决方案2】:

    我为解决这个问题所做的是检测计算机是否运行 Windows 8,如果是,则不设置 Handled 以便不会发生与鼠标相关的事件。

    If Not My.Computer.Info.OSFullVersion.Contains("Windows 8") Then
        e.Handled = True
    End If
    

    【讨论】:

      猜你喜欢
      • 2012-10-06
      • 1970-01-01
      • 2019-09-28
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多