我正在Windows Phone 7上开发一个应用程序。所以我的登陆页面是一个自定义的Splash Screen页面(我没有使用显示启动画面的默认方式,即有一个png文件,因为我需要添加数据在运行时的启动画面中根据用户配置文件)。所以我创建了一个splashscreen页面。经过一段时间的延迟(5秒)后,我导航到我的主页面。使用
PhoneApplicationFrame root = Application.Current.RootVisual as PhoneApplicationFrame;
root.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
现在,如果用户按下手机的后退按钮,默认情况下会转到启动画面,但我希望应用程序退出。
我怎么能做到这一点。
答案 0 :(得分:4)
我有类似的情况,这是我使用的修复。
对于我想在浏览后跳过的页面,我添加了一个bool成员变量,用于确定我们是否加载页面内容或导航回上一页。这种方法有效并且似乎没有对应用程序产生任何不利影响,但可能有更好的解决方案。建议采用更好的方法。
public partial class LoginPage : PhoneApplicationPage
{
private bool _navigateBack;
public LoginPage()
{
InitializeComponent();
_navigateBack = false;
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
if (_navigateBack)
{
this.NavigationService.GoBack();
}
else
{
_navigateBack = true;
base.OnNavigatedTo(e);
}
}
}
答案 1 :(得分:3)
不幸的是,jmason的解决方案无法在Windows Phone 8上运行,因为您不允许强行退出应用程序,这意味着您不能在启动画面上写this.NavigationService.GoBack();
。更好(和有效)的解决方案是在完成初始屏幕后清理导航堆栈。
在启动画面后的页面上(通常是主页面):
protected override void OnNavigatedTo(NavigationEventArgs e)
{
// Calling the base class OnNavigatedTo method
base.OnNavigatedTo(e);
// Only clear the stack for 'new' (forward) and 'refresh' navigations
if (e.NavigationMode == NavigationMode.New || e.NavigationMode == NavigationMode.Refresh)
// For UI consistency, clear the entire page stack
while (this.NavigationService.RemoveBackEntry() != null)
// Do nothing
;
}
答案 2 :(得分:0)
此解决方案通过在退出应用之前隐藏启动画面来创建更清晰的退出。我使用此代码跳过导航回特定页面。
第1步:添加jmason的代码
步骤2:将LayoutRoot的默认设置为隐藏
Visibility="Collapsed"
步骤3:在OnNavigatedTo事件中,如果_navigateBack标志为false,则显示LayoutRoot。在OnNavigatedFrom事件中,重新隐藏LayoutRoot
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
if (_navigateBack)
{
this.NavigationService.GoBack();
}
else
{
LayoutRoot.Visibility = Visibility.Visible;
_navigateBack = true;
base.OnNavigatedTo(e);
}
}
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
LayoutRoot.Visibility = Visibility.Collapsed;
}
答案 3 :(得分:0)
非常简单,只需在启动画面之后将其添加到页面,即第一页
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
NavigationService.RemoveBackEntry();
}
在这里,您可以删除启动画面的后退条目。点击后退你的应用程序将被杀死,而不是回到飞溅。 快乐的编码。