Xamarin WebView手势识别器不工作

Xamarin WebView手势识别器不工作,xamarin,webview,uigesturerecognizer,Xamarin,Webview,Uigesturerecognizer,我在Xamarin WebView上使用手势识别器时遇到了一个棘手的问题: 虽然这里和Xamarin论坛的文档中有一些问题/答案,但WebView手势识别器应该都能工作,但我无法让它触发任何事件 我的XAML代码如下所示: <StackLayout BackgroundColor="LightGray" > <WebView x:Name="webView" VerticalOptions="FillAndExpand" > <WebView

我在Xamarin WebView上使用手势识别器时遇到了一个棘手的问题: 虽然这里和Xamarin论坛的文档中有一些问题/答案,但WebView手势识别器应该都能工作,但我无法让它触发任何事件

我的XAML代码如下所示:

<StackLayout BackgroundColor="LightGray" >
    <WebView x:Name="webView" VerticalOptions="FillAndExpand" >
        <WebView.GestureRecognizers>
            <SwipeGestureRecognizer Direction="Left" Swiped="onSwiped"/>
        </WebView.GestureRecognizers>
        <WebView.Source>
            <HtmlWebViewSource Html="{Binding HTML}" />
        </WebView.Source>
    </WebView>
</StackLayout>

到目前为止:

  • 同一页面标题上的同一手势识别器:works
  • 在另一个页面的ListView上使用相同的手势识别器:works
  • 尝试了Nuget软件包Vapolia.xamarin,该软件包在webview上也不起作用
  • 试图将GestureRecoginazer放在WebView周围的StackLayout上:也不起作用
在iOS设备和模拟器上试用过。通常iOS应该是这里最简单的部分

我真正想要实现的是:向左滑动,向前移动到另一个(编程定义的)网页。 我假设这些手势在某种程度上被webview吸收用于常规导航,但我想知道为什么有些示例会说所有手势都在webview上工作

另一种方法是将目标网页添加到“前进”路径上的webview历史堆栈中。。但我不知道该怎么做


有人有什么提示吗

您可以使用自定义渲染器在特定平台上添加滑动事件。并以表格形式进行处理

以形式 创建
CustomWebView

public class CustomWebView : WebView
{
    public event EventHandler SwipeLeft;
    public event EventHandler SwipeRight;

    public void OnSwipeLeft() =>
        SwipeLeft?.Invoke(this, null);

    public void OnSwipeRight() =>
        SwipeRight?.Invoke(this, null);
}
在Android中 现在你只需要像这样使用它

<local:CustomWebView x:Name="browser"
           HorizontalOptions="Center"
           VerticalOptions="CenterAndExpand" 
           SwipeLeft="browser_SwipeLeft"
           SwipeRight="browser_SwipeRight">


还有一个额外的技巧使它最终起作用。由于我的Xamarin MasterDetailPage设置,上述所有(正确)解决方案均被忽略

这是捕获所有水平滑动,而不是将它们放到HybridWebView

MasterDetailPage.IsGestureEnabled = false;

终于修复了它,并在我的网络视图中启用了滑动手势。

Lucas,非常感谢您提供了详细的示例-到目前为止,他太忙了,无法查看它。。我想避免使用自定义渲染器,但我有另一个问题表单中的webview会阻止某些手势识别器。因此,使用自定义渲染器是最好的方法。我想避免使用自定义渲染器,但表单webview现在有另一个问题:我正在将远程HTML解析为Xamarin表单webview(webviewsource.HTML=“…”)其中包括本地保存的图像。在模拟器上工作正常,但在实际设备上,我只看到空框(没有错误?比如缺少图像)。我假设我需要设置“AllowingReadAccessTour”才能加载这些本地图像,因此需要再次使用自定义viewcontroller。。。或者仅仅在渲染器中也是可能的?它们是不同的问题,您可以创建一个包含更多细节的新线程,以便我们可以更好地帮助您。如果我的回答对您有帮助,请不要忘记接受我的回答,这将帮助更多有类似问题的人。是的,我现在使用此处描述的相应自定义渲染器(而不是控制器)解决了本地图像问题:并且现在还将实现您的手势识别器。
<local:CustomWebView x:Name="browser"
           HorizontalOptions="Center"
           VerticalOptions="CenterAndExpand" 
           SwipeLeft="browser_SwipeLeft"
           SwipeRight="browser_SwipeRight">

MasterDetailPage.IsGestureEnabled = false;