使用 Shell 在 c#xamarin 表单中定义跨平台移动应用程序的布局

问题描述

我是 xamarin 表单和 shell 的新手,我目前正在尝试使用 Shell (Xamarin.Forms Shell) 设计应用程序的层次结构。我想设计我的应用程序,以便用户登录后,他将被带到一个页面(我们称之为主页),该页面可以从弹出菜单中选择,并在底部有自己独特的选项卡。我还希望在弹出菜单中可以看到另一个页面(我们称之为主页二),这样如果用户点击主页二,它就会被带到主页二,它在底部有自己的不同选项卡。用户应该会看到不同的标签,具体取决于他们在弹出菜单中选择的主页。

这里是整体布局的想法:

  1. 一旦用户启动应用程序,他们就会被带到一个起始页(StartPage)

  2. 起始页让用户可以选择登录 (LoginPage) 或注册 (RegistrationPage)

  3. 一旦用户成功登录,他们将被带到第一页(HomePageOne),其中包含底部的 4 个标签

  4. 如果用户打开弹出菜单,它应该显示 HomePageOne 和 HomePageTwo 的项目,以及注销菜单项。

  5. 如果用户点击主页 2 (HomePageTwo),他们将被带到主页 2,该主页与主页 1 有不同的标签,反之亦然

  6. 如果用户选择退出,他们将被带回到起始页(StartPage)

我目前有两个问题。首先,我不确定如何定义我的 shell 来解释具有不同选项卡的不同主页。其次,当用户选择退出时,它仍然显示弹出菜单(汉堡菜单),即使只有在用户成功登录时才能看到。

这是我的 AppShell.xaml:

<ShellItem Route="Start" FlyoutItemIsVisible="False">
    <ShellContent Route="StartPage" ContentTemplate="{DataTemplate local:StartPage}" />
</ShellItem>
<ShellItem Route="Login" FlyoutItemIsVisible="False" >
    <ShellContent Route="LoginPage" ContentTemplate="{DataTemplate local:LoginPage}" />
</ShellItem>
<ShellItem Route="Registration" FlyoutItemIsVisible="False" >
    <ShellContent Route="RegistrationPage" ContentTemplate="{DataTemplate local:RegistrationPage}" />
</ShellItem>

<FlyoutItem Title="Home Page One" Icon="icon_about.png">        
    <ShellContent Route="HomePageOne" ContentTemplate="{DataTemplate local:HomePageOne}" />
</FlyoutItem>
<FlyoutItem Title="Home Page Two" Icon="icon_Feed.png">
    <ShellContent Route="HomePageTwo" ContentTemplate="{DataTemplate local:HomePageTwo}" />
</FlyoutItem>

<!-- When the Flyout is visible this will be a menu item you can tie a click behavior to  -->
<MenuItem Text="logout" StyleClass="MenuItemLayoutStyle" Clicked="Menulogout_Clicked">
</MenuItem>

这是我的 AppShell.xaml.cs:

public partial class AppShell : Xamarin.Forms.Shell
{
    public AppShell()
    {
        InitializeComponent();
        Routing.RegisterRoute(nameof(StartPage),typeof(StartPage));
        Routing.RegisterRoute(nameof(RegistrationPage),typeof(RegistrationPage));
        Routing.RegisterRoute(nameof(LoginPage),typeof(LoginPage));
    }

    private async void Menulogout_Clicked(object sender,EventArgs e)
    {
        await Shell.Current.GoToAsync("StartPage");
    }

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...