[英]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;
}
始終調用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.