簡體   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