我有一个登录页面,这是一个导航页面,在这里我导航到主详细页面。但现在我想回到登录页面,当我点击退出按钮。这是我为此做的。 My login page和Master 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>
主要详细页面的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());
}
}
但我不工作。导航到登录页面成功但在工具栏中显示我不想要的注销和后退按钮。所以我怎么做
var masterDetailPage = new MasterDetailPage1();
masterDetailPage.Detail = new NavigationPage(new Page1());
Application.Current.MainPage = masterDetailPage;
在这里,您将主页的详细信息声明为导航页面,并将其设置为当前主页。但是你现在在你的NagiationPage中,所以当你打电话时
(this.Detail as NavigationPage).PushAsync(new LoginPage());
您在导航堆栈中推送新的登录页面,但仍可通过后退按钮访问其他页面,您要做的是重新定义主页面:
Application.Current.MainPage = new LoginPage();
首先,您不需要在LoginVM中调用以下代码行。因为最后你设置Application.Current.MainPage
。
await App.Current.MainPage.Navigation.PopAsync();
为什么要推送登录页面?如果要完全注销用户,则他/她应该无法通过单击后退按钮返回上一页。
在我看来,你应该再次设置Application.Current.MainPage
。可能与你在App.xaml.cs
中所做的一样。