【发布时间】:2019-12-20 10:59:42
【问题描述】:
我想创建一个带有导航抽屉的应用程序。所以每个页面都应该可以通过抽屉“链接”项访问。
为了保护这些页面,应用程序应该只能在有效会话中访问,否则应该呈现登录页面。
我试图解释到目前为止我为复制目的所做的事情......
创建新的 Xamarin 表单项目后,我创建了一个 MainPage,其中包含抽屉和当前呈现的页面
public class MainPage : MasterDetailPage
{
public MainPage()
{
Master = new MasterPage();
Detail = new NavigationPage(new DummyPage()); // Set initial page
}
}
所以 MasterPage(抽屉)现在是空的
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;
}
当点击登录页面上的“登录”按钮时,我不执行
SignInCommand = new Command(() =>
{
await Application.Current.MainPage.Navigation.PushAsync(new MainPage());
});
这对我有用
SignInCommand = new Command(() =>
{
Application.Current.MainPage = new MainPage();
});
【问题讨论】:
标签: c# xamarin xamarin.forms