[英]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.