退出后,Xamarin表单导航无法登录

时间:2019-03-13 15:52:26

标签: c# xamarin.forms

因此,我在我的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();

注销后。

1 个答案:

答案 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类型。

相关问题