我的应用程序目前在启动时转到MainPage.xaml
(我不知道它在哪里配置)。
我希望能够在某些条件下从另一个页面开始。我想我可以将此代码添加到Application_Launching()
页面中的App.xaml.cs
:
NavigationService.Navigate(new Uri("/SecondPage.xaml", UriKind.Relative));
但App.xaml.cs中没有NavigationService
。
如果foo == true
?
答案 0 :(得分:4)
更改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
清除NavigationPage:
<DefaultTask Name ="_default" NavigationPage=""/>
答案 1 :(得分:3)
根据条件,这是一种导航方式:
在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重新定义导航到某个页面时导航到的内容。
答案 2 :(得分:0)
在启动时更改 MainPage 是当 App 类的新实例被启动时....在 App.xaml.cs 页面中,应用程序应首先从 ctor 内启动一个新的 AppShell 组件。如果不是,则 Shell.Current 对象将始终为空;但是,您可以使用 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");
}