Xamarin Forms MasterDetailPage 动态更改母版
Xamarin Forms MasterDetailPage dynamically change master
我在我的 Xamarin 应用程序中使用默认的 MasterDetailPage
导航,其中 master 是侧面导航,detail 是用户可以导航到的内容页面。
我已经将代码添加到 MenuPage
:
public MenuPage()
{
InitializeComponent();
if (ProfilPage.loggedin)
{
ucet_stack.IsVisible = true;
ucet.IsVisible = true;
ucet.Text = "Váš účet " + ProfilPage.meno;
}
else
{
ucet_stack.IsVisible = false;
ucet.IsVisible = false;
}
}
我想在用户登录后更改 MenuPage
的内容。构造函数只在第一次被调用,所以它永远不会改变。我试图将相同的代码放入 onAppearing
但也没有用。那么在用户登录后我可以使用什么来动态更改菜单呢? 注意我对此很陌生。
更新:
我用新的 MenuPage 创建了第二个 MasterDetailPage,并试图在一个详细的内容页面中更改它,但它变成了空白
if(ProfilPage.loggedin)
{
Application.Current.MainPage = new MainLoggedPage();
}
我会说这是用户界面问题,您很可能不需要在登录页面上显示汉堡包菜单,因为我不知道任何应用程序都有。
但在您需要的情况下,最简单甚至是最干净的解决方案是拥有两个不同的主详细信息页面,并根据情况将它们分配给根。
隐藏母版页的某些部分并非不可能,但正如@Jason 所说,这样做不是一般做法,我不知道这方面的例子,尤其是你不使用MVVM 和大多数 Xamarin 应用程序都是以这种方式完成的,您大部分时间都必须自己完成,他关于从哪里开始的建议是一个很好的建议。
首先,获取对当前 MenuPage 的引用
var md = (MasterDetailPage)Application.Current.MainPage;
var menu = (MenuPage)md.Master;
然后,调用您创建的任何 public 方法来更新它
menu.SetUserLogin();
我在我的 Xamarin 应用程序中使用默认的 MasterDetailPage
导航,其中 master 是侧面导航,detail 是用户可以导航到的内容页面。
我已经将代码添加到 MenuPage
:
public MenuPage()
{
InitializeComponent();
if (ProfilPage.loggedin)
{
ucet_stack.IsVisible = true;
ucet.IsVisible = true;
ucet.Text = "Váš účet " + ProfilPage.meno;
}
else
{
ucet_stack.IsVisible = false;
ucet.IsVisible = false;
}
}
我想在用户登录后更改 MenuPage
的内容。构造函数只在第一次被调用,所以它永远不会改变。我试图将相同的代码放入 onAppearing
但也没有用。那么在用户登录后我可以使用什么来动态更改菜单呢? 注意我对此很陌生。
更新:
我用新的 MenuPage 创建了第二个 MasterDetailPage,并试图在一个详细的内容页面中更改它,但它变成了空白
if(ProfilPage.loggedin)
{
Application.Current.MainPage = new MainLoggedPage();
}
我会说这是用户界面问题,您很可能不需要在登录页面上显示汉堡包菜单,因为我不知道任何应用程序都有。
但在您需要的情况下,最简单甚至是最干净的解决方案是拥有两个不同的主详细信息页面,并根据情况将它们分配给根。
隐藏母版页的某些部分并非不可能,但正如@Jason 所说,这样做不是一般做法,我不知道这方面的例子,尤其是你不使用MVVM 和大多数 Xamarin 应用程序都是以这种方式完成的,您大部分时间都必须自己完成,他关于从哪里开始的建议是一个很好的建议。
首先,获取对当前 MenuPage 的引用
var md = (MasterDetailPage)Application.Current.MainPage;
var menu = (MenuPage)md.Master;
然后,调用您创建的任何 public 方法来更新它
menu.SetUserLogin();