我正试图从一个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
最后,在//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());
};
(Android项目)中,我试图通过以下方式管理所有这些:
{{1}}
我发现这非常令人困惑且没有成效。 我想要的只是一种从一个ContentPage导航到另一个ContentPage的方法。
答案 0 :(得分:1)
我分享您的挫败感 - 但是,据我所知,Xamarin正致力于改进页面导航。
目前,您有几个选择。
如果您乐意拥有流程,那么无需替换整个页面但又能够返回,请使用NavigationPage或提到的PageManager echyzero。
如果您要有一个选项页面,请使用MasterDetailPage并替换详细信息。
或者,创建一个具有名为SetRootPage的方法的接口,并为Android和iOS实现它。在启动时将接口实例传递给App.Run(IPageLoader),然后可以从App类调用SetRootPage来替换Root。我之前确实报告了一个错误,现在可能已经修复了。与此同时,我的解决方法是使用CarouselPage,在Carousel上只有一个页面,我在需要时替换它 - 它实际上运行得很好,如果有点hacky。
答案 1 :(得分:0)
答案取自Xamarin.Forms文件here
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内调用等待Navigation.PushAsync(“您想要的任何页面”)。