我有一个主从页面,其中包含左侧菜单。当用户在主从页面上时,它可以正常工作。但是,当用户从主从页面移动到简单内容页面(不属于主从页面的一部分),在这个内容页面上,如果他从左向右滑动,左侧菜单就会打开。 我该如何在这个内容页面上禁用左侧菜单?为什么简单内容页面上显示左侧菜单,而它不是主从页面的一部分?
我有一个主从页面,其中包含左侧菜单。当用户在主从页面上时,它可以正常工作。但是,当用户从主从页面移动到简单内容页面(不属于主从页面的一部分),在这个内容页面上,如果他从左向右滑动,左侧菜单就会打开。 我该如何在这个内容页面上禁用左侧菜单?为什么简单内容页面上显示左侧菜单,而它不是主从页面的一部分?
IsGestureEnabled = false;
await Navigation.PushAsync(new PageWhichWontOpenTheMenu());
protected override void OnAppearing(){
base.OnAppearing();
(Application.Current.MainPage as RootPage).IsGestureEnabled = false;
}
您只能从主详细页面禁用手势。
可以通过通知当前页面不是主页面来解决:
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");
}
谢谢
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;
}
要真正禁用它,我找到了一种方法,使用Navigation.PushModalAsync(...)
。但是这种方式,你不再有顶部的导航栏了。不过你可以自己构建一个。
Detail.Navigation.PushAsync(...)
,而应该使用Navigation.PushAsync(...)
。对我有用的方法是使用IsEnabled属性禁用整个MasterDetailPage。
在我的情况下,从选项菜单(而不是导航或更改详细页面)执行进程,并且我需要阻止用户与页面的任何交互。
希望这可以帮助到您。
此致敬礼
PushModalAsync(...)
。 - imgen