如何将 App Shell 与每页不同的 Flyout 项目一起使用

Posted

技术标签:

【中文标题】如何将 App Shell 与每页不同的 Flyout 项目一起使用【英文标题】:how to use App Shell with different Flyout items per page 【发布时间】:2021-12-12 22:20:34 【问题描述】:

我是 Xamarin 表单的新手,我需要创建登录页面来记录两种用户类型(客户、管理员)。 之后,它将用户登录到他们的个人资料。 问题是每个配置文件都有不同的弹出项。 所以我不知道如何实现这一目标以及最佳实践是什么。 在这里演示这个想法是一张图片。

【问题讨论】:

看看***.com/a/65187674/5228202 创建其他属性,如 IsAdmin 并通过在同一个 appshell 上绑定到 IsVisible 来处理可见性 【参考方案1】:

在您的登录按钮中,您可以在 XAML 中这样做:

<Button ... Clicked="Login_Clicked" ... />

对于这个用户名,如果是管理员或客户,您可以检查您的数据库并返回一个值以了解它。创建两个页面(AdminPage 和 CustomerPage),并在您的代码隐藏中:

private async void Login_Clicked(object sender, System.EventArgs e)

   if (Database.CheckUser() == "admin")
     Application.Current.MainPage.Navigation.PushAsync(new AdminPage());
    else 
       Application.Current.MainPage.Navigation.PushAsync(new CustomerPage());
   

如果您不想创建两个页面,则可以创建一个页面(UserPage),通过验证用户是什么,然后在您的代码隐藏中设置按钮/标签及其功能,例如:

UserPage.xaml.cs

public UserPage(string checkUser)

 if(checkUser == "admin")
  ProcessAdmin();
 
 else
  ProcessCustomer();
 


ProcessAdmin()
 btn1.Text = "Admin Profiler";
 btn2.Text = "Home Page";
 ...
 ...
 btn1.Clicked => (s,e) 
   //do something for admin profiler button
 ;

【讨论】:

【参考方案2】:

FlyoutPage中有两种页面:FlyoutDetail,你可以根据用户的角色来改变它们。 这是一个例子:

**FlyoutPage:**设置flyout依赖于构造函数中设置的标志

public partial class FlyoutMainPage : FlyoutPage
    
        public FlyoutMainPage(bool flag)
        
            InitializeComponent();
            if (flag)
             Flyout = new MenuPage1();
                Detail = new NavigationPage(new TestPage1());
            
            else
           Flyout = new MenuPage2();
            Detail = new NavigationPage(new TestPage1());
        
    

导航:根据动作设置标志值

    async void Button_Clicked(System.Object sender, System.EventArgs e)
    
      await Navigation.PushAsync(new FlyoutMainPage(true));
    

   async void Button_Clicked_1(System.Object sender, System.EventArgs e)
    
        await Navigation.PushAsync(new FlyoutMainPage(false));
    

【讨论】:

OP 正在使用 Shell 的弹出窗口 然后只需更改导航部分它仍然可以工作

以上是关于如何将 App Shell 与每页不同的 Flyout 项目一起使用的主要内容,如果未能解决你的问题,请参考以下文章

分页算法

awk sub ++count 每 4 场比赛与每 1 场比赛不同

Pandas / Numpy - 如何获取和比较每列与每列的计数并写入 csv?

如何实现WordPress不同分类则每页显示不同数量的文章

django-taggit - 如何显示与每条记录相关的标签

如何使用shell脚本将文件从1个文件夹复制到文件夹名称是动态的另一个文件夹