Xamarin WebView手势识别器不工作
我在Xamarin WebView上使用手势识别器时遇到了一个棘手的问题: 虽然这里和Xamarin论坛的文档中有一些问题/答案,但WebView手势识别器应该都能工作,但我无法让它触发任何事件 我的XAML代码如下所示:Xamarin WebView手势识别器不工作,xamarin,webview,uigesturerecognizer,Xamarin,Webview,Uigesturerecognizer,我在Xamarin WebView上使用手势识别器时遇到了一个棘手的问题: 虽然这里和Xamarin论坛的文档中有一些问题/答案,但WebView手势识别器应该都能工作,但我无法让它触发任何事件 我的XAML代码如下所示: <StackLayout BackgroundColor="LightGray" > <WebView x:Name="webView" VerticalOptions="FillAndExpand" > <WebView
<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上:也不起作用
有人有什么提示吗 您可以使用自定义渲染器在特定平台上添加滑动事件。并以表格形式进行处理 以形式 创建
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;