我使用Xamarin.Forms(版本1.4)
页面层次结构:
- > NavigationPage
- > MasterDetailPage
如何在推送屏幕中禁用滑动菜单(通过手势打开母版页)?
推送方法:
await((NavigationPage)((MasterDetailPage)Application.Current.MainPage).Detail).PushAsync(page))
滑动菜单只能在根页面上使用。
答案 0 :(得分:3)
MasterMenuPage包含一个名为" IsGestureEnabled"的bool属性。这决定了菜单中的滑动是否可用。
IsGestureEnabled = false //no swipe gesture
在这里,我可以为您提供一个自定义MasterDetailPage
的简单实现public class MainMDPage : MasterDetailPage
{
public MainMDPage(Page masterPage, Page detailPage)
{
MasterBehavior = MasterBehavior.Popover;
Master = masterPage;
Detail = detailPage;
}
/// <summary>
/// Pushes a page and disables the master menu.
/// </summary>
/// <param name="page"></param>
/// <returns></returns>
public async Task PushAsync(Page page)
{
if(Detail is NavigationPage navPage)
{
await navPage.PushAsync(page);
IsGestureEnabled = false;
}
}
/// <summary>
/// Pops a page and enables the master menu if we get to the root page.
/// </summary>
/// <returns></returns>
public async Task PopAsync()
{
if (Detail is NavigationPage navPage)
{
await navPage.PopAsync();
if (navPage.Navigation.NavigationStack.Count == 1) //if count == 1 -> is root page
IsGestureEnabled = true;
}
}
}
答案 1 :(得分:0)
在我的应用中,我拥有继承自MasterDetailPage的“RootPage”。这是我的应用程序的MainPage。我有一个“MenuPage”,它继承自创建菜单项的ContentPage。我在“RootPage”中将其设置为Master。然后我创建一个新的NavigationPage,将带有列表视图的页面传递给构造函数。然后我将Detail设置为NavigationPage。在列表视图页面中,OnItemSelected我使用Navigation.PushAsync(detailsPage)
导航。按照这种模式,当detailsPage加载时,iOS中没有“汉堡包/滑动菜单”,而只能返回上一页(列表视图)。以下是代码示例:
public class RootPage : MasterDetailPage {
MenuPage menuPage;
public RootPage() {
menuPage = new MenuPage();
menuPage.Menu.ItemSelected += (sender, e) =>
NavigateTo(e.SelectedItem as Model.MenuItem);
Master = menuPage;
Detail = new NavigationPage(PlayerListPage());
}
}
public class PlayerListPage : ContentPage {
protected async void OnItemSelected(object sender, ItemTappedEventArgs e) {
var item = e.Item as PlayerViewModel;
var selected = new PlayerPage(item) {
BindingContext = item
};
await Navigation.PushAsync(selected);
}
}
public class MenuPage : ContentPage {
public ListView Menu { get; set; }
public MenuPage() {
Icon = "menu.png";
Title = "menu"; // The Title property must be set.
var menuItems = new List<MenuItem> {
new MenuItem {
Title = "Players",
IconSource = "people.png",
TargetType = typeof(PlayerListPage)
},
};
Menu = new ListView {
ItemsSource = menuItems,
};
}
}
public class MenuItem {
public string Title { get; set; }
public string IconSource { get; set; }
public Type TargetType { get; set; }
}
这是你想要达到的目标吗?如果没有,那么您可以通过disable the sliding menu
澄清您的意思,并提供更多代码示例。