我想创建一个带有导航抽屉的应用程序。因此,应通过抽屉的“链接”项访问每个页面。
要保护这些页面,应仅可在有效会话上访问该应用程序,否则应呈现登录页面。
我正在尝试解释到目前为止为复制目的所做的事情...
创建新的Xamarin表单项目后,我创建了一个MainPage,其中包含抽屉和当前呈现的页面
public class MainPage : MasterDetailPage
{
public MainPage()
{
Master = new MasterPage();
Detail = new NavigationPage(new DummyPage()); // Set initial page
}
}
因此,母版页(抽屉)目前为空
internal class MasterPage : ContentPage
{
public MasterPage()
{
Title = "Master";
Content = new StackLayout { Children = { } };
}
}
与渲染的DummyPage相同
class DummyPage : ContentPage
{
public DummyPage()
{
Title = "Dummy";
Content = new StackLayout { Children = { new Label { Text = "Dummy Page" } } };
}
}
因此,如果没有LoginPage,我的App文件将如下所示
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new MainPage();
}
}
呈现的应用程序随后看起来不错
当我尝试在访问主应用程序部分之前呈现LoginPage时,我会做类似的事情
public partial class App : Application
{
public App()
{
InitializeComponent();
Page initialPage;
if (false) // check if logged in
{
initialPage = new LoginPage();
}
else
{
initialPage = new MainPage();
}
MainPage = new NavigationPage(initialPage);
}
}
不幸的是,呈现的MainPage看起来像
我该如何解决?什么遗漏或出了什么问题?
更新 我发现可以全局设置当前显示的页面。所以一开始我就做
public App()
{
InitializeComponent();
Page initialPage;
if (isLoggedIn)
{
initialPage = new LoginPage();
}
else
{
initialPage = new MainPage();
}
MainPage = initialPage;
}
并且当我单击LoginPage上的“登录”按钮时,我不执行
SignInCommand = new Command(() =>
{
await Application.Current.MainPage.Navigation.PushAsync(new MainPage());
});
这对我有用
SignInCommand = new Command(() =>
{
Application.Current.MainPage = new MainPage();
});
答案 0 :(得分:1)
您应该尝试这个
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new MainPage(false);
}
}
public class MainPage : MasterDetailPage
{
public MainPage(bool value)
{
Master = new MasterPage();
Detail = value ? new NavigationPage(new LoginPage()) : new NavigationPage(new DummyPage());
}
}
我认为导航不会添加主容器。
答案 1 :(得分:0)
似乎您将MasterDetailPage
放在了NavigationPage
中。实际上,这样做是不合适的。您可以像下面这样改善代码
public partial class App : Application
{
public App()
{
InitializeComponent();
if (false) // check if logged in
{
MainPage = new NavigationPage(initialPage);
}
else
{
MainPage = new MainPage();
}
}
}