繁体   English   中英

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

[英]How to route touch events to separate controls UWP C#

我面临自定义触摸事件处理的主要问题。 目标是根据使用了多少个手指,将触摸事件路由到不同的控件。

例如:我们有一个滚动视图,其中安排了许多Web视图。 缩放系数设置为向全屏显示一个Web视图。

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

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;
    }
  • 1指事件应进入网络视图// //
  • 2指事件应该转到ScrollView //,这不起作用,因为Webview会获取touch事件,并且不会再次释放它
  • 3指事件应缩小//这样可以

始终调用PointerPressed,但是当PointerPressed在Web视图上时,不会调用PointerReleased。

这也导致不减少pointerCount的效果,因此可以进行1次手指点击3次,并导致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();" });

而webview会处理其余的工作。 因此,没有我担心的自定义调用,它只是被调用的标准函数,总是在执行触摸/单击时被调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM