如何将触摸事件路由到单独的控件 UWP C#

How to route touch events to separate controls UWP C#

我遇到了自定义触摸事件处理的主要问题。 目标是根据使用的手指数量将触摸事件路由到不同的控件。

例如: 我们有一个 scrollview,里面排列着很多 webview。 缩放因子设置为全屏显示一个网络视图。

目前我正在使用这样的指针按下/释放功能来配置控件,因此事件将被正确的捕获:

int pointerCount = 0;

private void ScrollView_PointerPressed(object sender, PointerRoutedEventArgs e)
    {
        try
        {
            pointerCount++;
            if (pointerCount > 3)
                pointerCount = 0;

            switch (pointerCount)
            {
                case 1:
                    // I don't do anything, so it goes to the webview anyway
                    break;
                case 2:
                    EnableScrolling();
                    break;
                case 3:
                    ZoomInOut();
                    break;
                default:
                    return;
            }
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine(ex.Message);
        }
    }

private void EnableScrolling()
    {
        ScrollViewer.ZoomMode = ZoomMode.Enabled;
        ScrollViewer.VerticalScrollMode = ScrollMode.Enabled;
        ScrollViewer.HorizontalScrollMode = ScrollMode.Enabled;
    }

始终调用PointerPressed,但当PointerPressed 在webview 上时不调用PointerReleased。

这也导致了不减少pointerCount的效果,所以有可能做一个单指点击3次并导致三指事件和缩小,这是不应该发生的。

希望您能看到问题并帮助解决。 如果您认为这是一种错误的方法,请随时展示一个更好的替代方案。

好吧,我找不到合适的解决方案,但如果它们被释放,我可以通过增加指针事件的计数来消除不需要的副作用。

private void ScrollViewer_PointerReleased(object sender, PointerRoutedEventArgs e)
    {
        pointerCount = 0;
    }

所以正确的方向处理现在工作正常,但我仍然不能做类似的事情:

currentWebView.CapturePointer(e.Pointer);

因为它不会将 pointerEvent 植根到它的内容中,所以它会调用 WebView 的指针事件,但不会将它植根到它的 html 和 js 内容中。

我也试过用

.... wb.ManipulationStarted += Wb_ManipulationStarted; ....

    private void Wb_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
    {
        // something here
    }

但是这个也不会到内容里。

对另一种方法有什么想法吗?

我知道怎么处理了,简单到哭了...

我只是添加了这行代码来告诉webviews js有一个事件...

await webView.InvokeScriptAsync("eval", new string[] { "document.elementFromPoint(" + pointX + ", " + pointY + ").click();" });

Web 视图处理其余部分。所以没有我担心的自定义调用,它只是调用的标准函数,它总是在执行 touch/click 时调用。