如何在启动时更改起始页

本文关键字:起始页 启动 | 更新日期: 2023-09-27 18:33:45

我的应用程序目前在启动时转到MainPage.xaml(我不知道它在哪里配置)。

我希望能够在某些情况下从另一个页面开始。我想我可以将此代码添加到App.xaml.cs页面中的Application_Launching()

NavigationService.Navigate(new Uri("/SecondPage.xaml", UriKind.Relative));

NavigationService在 App.xaml.cs 中不可用。

如果foo == true,如何使用另一个页面启动应用程序?

如何在启动时更改起始页

更改App.Xaml.cs中的起始页:

private void Application_Launching(object sender, LaunchingEventArgs e)
{
        Uri nUri = new Uri("/SecondPage.xaml", UriKind.Relative);
        ((App)Application.Current).RootFrame.Navigate(nUri);
}

Property'WMAppManifest.xml文件中设置静态启动页

<DefaultTask  Name ="_default" NavigationPage="SecondPage.xaml"/>

编辑

试试吧:

    private void Application_Launching(object sender, LaunchingEventArgs e)
    {
        Uri nUri = new Uri("/GamePage.xaml", UriKind.Relative);
        RootFrame.Navigate(nUri);
    }

并在Property'WMAppManifest.xml清除导航页面:

<DefaultTask  Name ="_default" NavigationPage=""/>

以下是一种根据条件进行导航的方法:

在 App.xaml 的构造函数中.cs添加:

RootFrame.Navigating+= RootFrameOnNavigating;

然后像这样定义 RootFrameOnNavigating:

    private bool firstNavigation = true;
    private void RootFrameOnNavigating(object sender, NavigatingCancelEventArgs navigatingCancelEventArgs)
    {
        //by defaullt stringOfPageNameSetInWMAppManifest is /MainPage.xaml
        if (firstNavigation && navigatingCancelEventArgs.Uri.ToString().Contains(stringOfPageNameSetInWMAppManifest))
        {
            if (foo == true)
            {
                //Cancel navigation to stringOfPageNameSetInWMAppManifest
                navigatingCancelEventArgs.Cancel = true;
                //Use dispatcher to do the navigation after the current navigation has been canceled
                RootFrame.Dispatcher.BeginInvoke(() =>
                {
                    RootFrame.Navigate(new Uri("/Page1.xaml", UriKind.Relative));
                });
            }
        firstNavigation = false;
    }

另一种方法是使用 UriMapper 重新定义导航到某个页面时导航到的 uri。

在启动时更改主页是启动 App 类的新实例时。在 App.xaml.cs 页面中,应用程序应首先从 ctor 中启动新的 AppShell 组件。如果没有,则 Shell.Current Object 将始终为空;但是,您可以使用OnStart方法,因为我们可以使用它,然后导航到正确的登录页面或其他任何内容...

    public App()
    {
        InitializeComponent();
        XF.Material.Forms.Material.Init(this);
        DependencyService.Register<MockDataStore>();
        //MainPage = new AppShell();
        MainPage = new AppShell();
        //GoToLoginPageOnStart();
    }

    protected override void OnStart()
    {
        // Handle when your app starts
        Shell.Current.GoToAsync("//LoginPage");
       
    }