我在我的应用上运行了一个主详情页面。打开母版页的标准方法是选择汉堡菜单图标或从左侧滑动。 我的一个详细页面碰巧使用了旋转木马页面。因此,从左侧滑动可以打开母版页或将旋转木马滑到左侧(如果发生错误事件,则会非常恼火)。
为了在从左侧滑动时停止显示母版页面,我将IsGestureEnabled设置为false。但是这会阻止母版页出现。尽管在按下汉堡菜单图标时它们会有触觉反馈,但它什么也没做。
有没有办法强制在MasterDetailPage上忽略滑动手势,而不是在图标上点击手势?
这是一个非常简单的应用程序,其MasterDetailPage和IsGestureEnabled设置为false。母版页面无法打开。 https://www.dropbox.com/s/rkm5eph3vr38avm/MasterDetailPageTest.zip?dl=0
答案 0 :(得分:1)
我通过为MasterDetailPage创建自定义渲染器来提出一些解决方法。它现在应该适合我的需要。
public class MyMasterDetailPageRenderer : Xamarin.Forms.Platform.Android.AppCompat.MasterDetailPageRenderer
{
public override bool OnTouchEvent(MotionEvent e)
{
if (IsDrawerOpen(Android.Support.V4.View.GravityCompat.Start))
return base.OnTouchEvent(e);
else
{
if (e.Action == MotionEventActions.Up || e.Action == MotionEventActions.Down)
return base.OnTouchEvent(e);
else
{
CloseDrawers();
return true;
}
}
}
}
需要在命名空间之外添加装配线:
[assembly: ExportRenderer(typeof(MyMasterDetailPage), typeof(MyMasterDetailPageRenderer))]
这并不能完全解决问题,但在刷卡时主页面不会打开。
答案 1 :(得分:0)
理查德的代码对我来说有一些变化
RootView page;
protected override void OnElementChanged( VisualElement oldElement, VisualElement newElement ) {
base.OnElementChanged( oldElement, newElement );
page = newElement as RootView;
}
public override bool OnTouchEvent( MotionEvent e ) {
if( IsDrawerOpen( Android.Support.V4.View.GravityCompat.Start ) )
return base.OnTouchEvent( e );
else {
if( (e.Action == MotionEventActions.Up || e.Action == MotionEventActions.Down || e.Action == MotionEventActions.Move)
&& (page?.SwipeEnabled ?? false)
)
return base.OnTouchEvent( e );
else {
CloseDrawers();
return true;
}
}
}