因此,我在我的xamarin表单中有一个LoginPage
,用户可以通过打开我的HomeMenuItems
中的汉堡菜单及其ListView
中的一个来导航到该菜单。当用户登录时,我导航回到HomePage并从导航堆栈中删除LoginPage
:
var nextPage = new HomePage();
await this.Navigation.PushAsync(nextPage);
Navigation.RemovePage(this);
还更改了Hamburger导航以添加新的HomeMenuItem(例如MyPage和Logout):
var md = (MasterDetailPage)Application.Current.MainPage;
var menu = (MenuPage)md.Master;
menu.showmychildren();
它可以工作,但是当我注销时,每当我尝试导航到LoginPage
时,我都会将Hamburger菜单改回“已注销的版本”,它会将我导航到HomePage
,但是我没有知道为什么要这么做。
从汉堡菜单导航到LoginPage:
public void hideall()
{
InitializeComponent();
ucet_stack.IsVisible = false;
ucet.IsVisible = false;
photo_sack.IsVisible = false;
photo.IsVisible = false;
menuItems = new List<HomeMenuItem>
{
new HomeMenuItem {Id = MenuItemType.Home, Title="> HomePage" },
new HomeMenuItem {Id = MenuItemType.Login, Title="> Login" },
new HomeMenuItem {Id = MenuItemType.Sponsors, Title="> Sponsors" }
};
ListViewMenu.ItemsSource = menuItems;
ListViewMenu.SelectedItem = menuItems[0];
ListViewMenu.ItemSelected += async (sender, e) =>
{
if (e.SelectedItem == null)
return;
var id = (int)((HomeMenuItem)e.SelectedItem).Id;
await RootPage.NavigateFromMenu(id);
};
}
然后我打电话给
var md = (MasterDetailPage)Application.Current.MainPage;
var menu = (MenuPage)md.Master;
menu.hideall();
注销后。
答案 0 :(得分:1)
根据您的描述,我会给您一些建议:
1。删除InitializeComponent();
,不需要您再次调用此方法。
2。如果要在方法Navigating to LoginPage from hamburger menu
中使用hideall()
,则可以尝试更改menuItems
中的项目顺序:
menuItems = new List<HomeMenuItem>
{
new HomeMenuItem {Id = MenuItemType.Login, Title="> Login" },
new HomeMenuItem {Id = MenuItemType.Home, Title="> HomePage" },
new HomeMenuItem {Id = MenuItemType.Sponsors, Title="> Sponsors" }
};
将登录项放置为数组中的第一个元素。在ListViewMenu.ItemsSource
中重置MasterPage
后,它将在menuItems中显示第一页。
3。通过问题和您的评论,我对您的注销按钮位于何处感到困惑?在homeMenu中?在loginPage中?
4。您使用方法ListViewMenu.ItemSelected
浏览页面,我认为要导航到的页面取决于 id ,因此您可以添加 breakPoint 在await RootPage.NavigateFromMenu(id);
行中,然后在浏览页面时检查SelectedItem的ID,以查看其是否为MenuItemType.Login
类型。