C# 如何从ContentPage导航到ContentPage?

C# 如何从ContentPage导航到ContentPage?,c#,xamarin,C#,Xamarin,我正在尝试从一个ContentPage导航到另一个。 在我的WelcomePage中,我有一个按钮,可以将我引导到另一个包含以下内容的页面 _loginButton.Clicked += (s, e) => { if (OnLoginEnter != null) OnLoginEnter(); }; 现在,在我的PageManager类中,我尝试管理所有页面,我有这样的东西 public cl

我正在尝试从一个
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());
    };
我觉得这是非常混乱和低效的。
我想要的只是一种从一个内容页面导航到另一个内容页面的方式。

答案摘自Xamarin.Forms documation

所以对你来说,它可能看起来像这样:

PageManager.WelcomePage.OnLoginEnter += () =>
    {
        await Navigation.PushAsync(PageManager.LoginPage.Generate());
    };
对于iOS,您需要通过如下所示的NavigationPage执行此操作(示例位于AppDelegate.cs文件中)


在此之后,您可以在应用程序的任何ContentPage中调用Wait Navigation.PushAsync(“您想要的任何页面”)。

我也有同感,但我知道Xamarin正在努力改进页面导航

现在,你有几个选择

如果您很高兴拥有一个流,那么不需要替换整个页面,但可以返回,请使用NavigationPage或前面提到的PageManager echyzero

如果要创建选项页,请使用MasterDetailPage并替换该详细信息


或者,创建一个接口,该接口有一个名为SetRootPage的方法,并在Android和iOS上实现它。在启动时将接口实例传递到App.Run(IPageLoader),然后可以从App类调用SetRootPage来替换根。不久前我报告了一个bug,现在可能已经修复了。与此同时,我的解决办法是使用旋转木马页面,旋转木马上只有一个页面,我会在需要时替换它-它实际上工作得很好,如果有点粗糙的话。

他们真的需要简化它。我将尝试一下旋转木马的想法。
Navigation
不可用,除非我使用
NavigationPage
。因此,请使用NavigationPage。有关如何设置,请参见上面的编辑。
PageManager.WelcomePage.OnLoginEnter += () =>
    {
        await Navigation.PushAsync(PageManager.LoginPage.Generate());
    };
window.RootViewController = new NavigationPage (new MyLoginForm ()).CreateViewController ();