如何在启动时更改起始页
本文关键字:起始页 启动 | 更新日期: 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");
}