如何在Xamarin Forms中禁用主从详细页面的左侧菜单?

4

我有一个主从页面,其中包含左侧菜单。当用户在主从页面上时,它可以正常工作。但是,当用户从主从页面移动到简单内容页面(不属于主从页面的一部分),在这个内容页面上,如果他从左向右滑动,左侧菜单就会打开。 我该如何在这个内容页面上禁用左侧菜单?为什么简单内容页面上显示左侧菜单,而它不是主从页面的一部分?

6个回答

6
如果你仍在寻找解决方案,可以按照以下方法实现:
IsGestureEnabled = false;

你可以继续使用。
await Navigation.PushAsync(new PageWhichWontOpenTheMenu());

要使用它,只需在OnAppearing方法中获取RootPage(即MasterDetailPage),如下所示:
protected override void OnAppearing(){
        base.OnAppearing();
        (Application.Current.MainPage as RootPage).IsGestureEnabled = false;
}

告诉我它对你是否有效,干杯!

3

您只能从主详细页面禁用手势。

可以通过通知当前页面不是主页面来解决:

1) 当我们通过

设置主详细页面时
 Detail = new NavigationPage((Page)Activator.CreateInstance(page));
 IsGestureEnabled = true;// always set it true when setting a page to master page

2) 在MasterDetails页中使用MessagingCenter通知当前页面不是主页面:(在主页面构造函数内)

MessagingCenter.Subscribe<string>(this, "DisableGesture", (sender) =>
            {
                if(sender == "0")
                {
                    IsGestureEnabled = false;
                }
                else
                {
                    IsGestureEnabled = true;
                }
            });

3) 当你从普通内容页面导航时,如果你不想从这里打开主菜单,则通知主页面IsGestureEnabled = false;

//content page OnAppearing method
 protected override void OnAppearing()
        {
            MessagingCenter.Send<string>("0", "DisableGesture");
        }

对于所有你不想打开主菜单的内容页面,请执行此操作。 ****记住,对于那些设置为主页的页面,在onappearing方法中发送值为“1”的消息中心。

 protected override void OnAppearing()
        {
            MessagingCenter.Send<string>("1", "DisableGesture");
        }

谢谢


2
更好的做法是在你的侧边菜单列表的OnMenuItemSelected事件中检查你想要禁用侧边菜单的类型,然后当导航到该页面时将IsGestureEnabled设置为false:
private void OnMenuItemSelected(object sender, SelectedItemChangedEventArgs e)
        {
            var item = (SideMenuItem)e.SelectedItem;
            var page = item.TargetType;
            if (page == typeof(PageToDisableMenu))
                IsGestureEnabled = false;
            Detail = new NavigationPage((Page)Activator.CreateInstance(page));
            IsPresented = false;
        }

我知道这个答案有点晚,但我希望它能对未来的某人有所帮助 :).

0

要真正禁用它,我找到了一种方法,使用Navigation.PushModalAsync(...)。但是这种方式,你不再有顶部的导航栏了。不过你可以自己构建一个。


0
你可能使用了Detail.Navigation.PushAsync(...),而应该使用Navigation.PushAsync(...)

这样不行,当从左边滑动时,菜单仍然会出现。为了真正禁用它,我找到了一种方法,使用 Navigation.PushModalAsync(...) - imgen

0

对我有用的方法是使用IsEnabled属性禁用整个MasterDetailPage。

在我的情况下,从选项菜单(而不是导航或更改详细页面)执行进程,并且我需要阻止用户与页面的任何交互。

希望这可以帮助到您。

此致敬礼


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接