2

假设我有一个代码

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()方法返回。

4

3 回答 3

4

警告 - Windows 开发人员指南不建议删除 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();
    }
}

因此,当用户按下后退按钮时,应用程序应该退出,因为没有剩余的 backstack 条目。

于 2012-11-28T06:17:57.703 回答
3

您不能以这种方式强制退出。
你可以做的是处理设置页面上的后退按钮按下并清除堆栈(这是允许的),然后让后退按钮被处理 - 因此用户将因为后退按钮而退出,而不是因为你的电话.

于 2012-11-27T12:56:45.140 回答
0
protected override void OnBackKeyPress(CancelEventArgs e)
    {
        while (NavigationService.CanGoBack)
        {
            NavigationService.RemoveBackEntry();
        }
        base.OnBackKeyPress(e);
    }
于 2013-10-31T19:28:06.347 回答