假设我有一个代码
protected override void OnNavigatedTo(NavigationEventArgs e)
{
var userInfo = SettingsManager.Read<User>(SettingsManager.UserInfoSetting);
if (e.NavigationMode == NavigationMode.Back && userInfo == null)
{
_mainViewModel.NavigationService.GoBack();
}
if (e.NavigationMode == NavigationMode.New && userInfo == null)
{
_mainViewModel.NavigationService.NavigateTo(new Uri(ViewModelLocator.SettingPageUrl, UriKind.Relative));
}
base.OnNavigatedTo(e);
}
当用户第一次运行应用程序时,他将被重定向到设置页面,它现在工作得非常好。如果用户不想提供他的信息,他可以按回按钮,在这种情况下我想跳过应用程序的主页并退出应用程序。如果我运行代码,则会收到InvalidOperationException
Cannot go back when CanGoBack is false.
GoBack()
方法调用PhoneApplicationFrame.GoBack()
方法导航回来。
答案 0 :(得分:4)
警告 - Windows Developer准则不建议删除backstack条目。因为您必须遵守后退按钮的自然行为。
链接 - https://docs.microsoft.com/en-us/windows/uwp/layout/navigation-history-and-backwards-navigation
当用户第一次进入设置页面时,尝试删除后面的堆栈条目(在您的情况下为主页面)。
您可以通过以下代码删除任何剩余的backstack条目:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
while (this.NavigationService.BackStack.Any())
{
this.NavigationService.RemoveBackEntry();
}
}
因此,当用户按下后退按钮时,应用程序应该退出,因为没有剩余的后退堆栈条目。
答案 1 :(得分:3)
你不能强行退出。
您可以做的是处理设置页面上的后退按钮并清除堆栈(允许),然后让后退按钮处理 - 因此用户将因为后退按钮退出,而不是因为您的呼叫
答案 2 :(得分:0)
protected override void OnBackKeyPress(CancelEventArgs e)
{
while (NavigationService.CanGoBack)
{
NavigationService.RemoveBackEntry();
}
base.OnBackKeyPress(e);
}