如何在Xamarin表单中从主要详细信息页面导航到内容页面?

时间:2019-02-23 06:25:01

标签: xamarin.forms navigation master-detail

我有一个登录页面,它是一个导航页面,在这里我导航到主要详细信息页面。但是现在我想在单击注销按钮时返回登录页面。这就是我要做的。 我需要My login pageMaster detail page,当我单击注销时,该控件已存在于MDP中并返回“登录”页面。

我的LoginVM

//here i navigate to my home page(Master detail page)

if (user.UserName == Employees.UserName && user.Password == Employees.Password)
                {
                    await App.Current.MainPage.DisplayAlert("success", "Login success", "OK");

                    await App.Current.MainPage.Navigation.PopAsync();
                     var masterDetailPage = new MasterDetailPage1();
                   masterDetailPage.Detail = new NavigationPage(new Page1());
                    Application.Current.MainPage = masterDetailPage;
                }

我的主要详细信息页面Xml

<?xml version="1.0" encoding="utf-8" ?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MyProject.Views.Profile.MasterDetailPage1"
             xmlns:pages="clr-namespace:MyProject.Views.Profile"
                  >
    <MasterDetailPage.ToolbarItems>
        <ToolbarItem Text="Logout" Clicked="ToolbarItem_Clicked"/>
    </MasterDetailPage.ToolbarItems>
  <MasterDetailPage.Master>

        <pages:MasterDetailPage1Master x:Name="MasterPage" />

    </MasterDetailPage.Master>

  <MasterDetailPage.Detail>

  </MasterDetailPage.Detail>

</MasterDetailPage>

主Deail页面的CS

 public partial class MasterDetailPage1 : MasterDetailPage
    {

        public MasterDetailPage1()
        {
            InitializeComponent();

        }

//some other code

        private void ToolbarItem_Clicked(object sender, EventArgs e)
        {
            (this.Detail as NavigationPage).PushAsync(new LoginPage());
            //App.Current.MainPage.Navigation.PushModalAsync(new LoginPage());

        }
    }

但是我不工作。它成功导航到登录页面,但是在工具栏中,它显示我不想要的注销和后退按钮。那我该怎么做

2 个答案:

答案 0 :(得分:0)

view.semanticContentAttribute = .forceRightToLeft

在这里,您将主页的详细信息声明为导航页,并将其设置为当前主页。但是您现在在NagiationPage中,所以当您致电

                var masterDetailPage = new MasterDetailPage1();
                masterDetailPage.Detail = new NavigationPage(new Page1());
                Application.Current.MainPage = masterDetailPage;

您在导航堆栈中推送了一个新的LoginPage,但是仍然可以通过“后退”按钮访问其他页面,您要做的是重新定义主页:

            (this.Detail as NavigationPage).PushAsync(new LoginPage());

答案 1 :(得分:0)

首先,您不需要在LoginVM中调用以下代码行。因为最后您要设置Application.Current.MainPage

await App.Current.MainPage.Navigation.PopAsync();

您为什么要推送登录页面?如果要完全注销用户,则他/她应该不能通过单击“后退”按钮返回上一页。

我认为,您应该再次设置Application.Current.MainPage。可能与您在App.xaml.cs中所做的相同。