[英]How to navigate from ContentPage to ContentPage?
我正在尝试从一个ContentPage
导航到另一个。 在我的WelcomePage
,我有一个按钮,该按钮应将我定向到具有以下内容的另一页
_loginButton.Clicked += (s, e) =>
{
if (OnLoginEnter != null) OnLoginEnter();
};
现在,在我尝试管理所有页面的PageManager
类中,我有类似的内容
public class PageManager : Page
{
#region Fields
public static WelcomePage WelcomePage = new WelcomePage();
public static LoginPage LoginPage = new LoginPage();
#endregion
public Page GetStarted()
{
return WelcomePage.Generate();
}
}
最后,在MainActivity.cs
(Android项目)中,我尝试使用以下方法来管理所有这些:
//I have to use a method for that for some reason. Can't call .Generate() directly.
SetPage(PageManager.GetStarted());
PageManager.WelcomePage.OnLoginEnter += () =>
{
SetPage(PageManager.LoginPage.Generate());
};
我发现这非常令人困惑且无济于事。 我想要的是一种从一个ContentPage导航到另一个ContentPage的方法。
我也很沮丧-但是,我了解Xamarin正在努力改善页面导航。
目前,您有几种选择。
如果您很高兴有流程,那么无需替换整个页面但可以返回,请使用提到的NavigationPage或PageManager echyzero。
如果要有一个选项页,请使用MasterDetailPage并替换详细信息。
或者,创建一个接口,该接口具有一个名为SetRootPage的方法,并为Android和iOS实施该接口。 在启动时将接口的实例传递到App.Run(IPageLoader)中,然后可以从App类中调用SetRootPage来替换Root。 我前一段时间确实报告了一个错误,现在可能已经修复了。 同时,我的解决方法是使用CarouselPage,在Carousel上只有一个页面,需要时可以替换该页面-实际上,如果有点黑,它的效果很好。
答案来自Xamarin。 在此处形成文档
listView.ItemSelected += async (sender, e) => {
var todoItem = (TodoItem)e.SelectedItem;
var todoPage = new TodoItemPage(todoItem); // so the new page shows correct data
await Navigation.PushAsync(todoPage);
};
因此,对于您来说,它可能看起来像这样:
PageManager.WelcomePage.OnLoginEnter += () =>
{
await Navigation.PushAsync(PageManager.LoginPage.Generate());
};
对于iOS,您需要通过如下所示的NavigationPage进行此操作(示例位于AppDelegate.cs文件中)
window.RootViewController = new NavigationPage (new MyLoginForm ()).CreateViewController ();
之后,您可以在应用程序的任何ContentPage中调用await Navigation.PushAsync('所需的任何页面')。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.