如何从ContentPage导航到ContentPage?

时间:2014-11-24 11:41:33

标签: c# xamarin

我正试图从一个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的方法。

2 个答案:

答案 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(“您想要的任何页面”)。