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 開発者のガイドラインでは推奨されていません。戻るボタンの自然な動作に固執する必要があるためです。

リンク - https://docs.microsoft.com/en-us/windows/uwp/layout/navigation-history-and-backwards-navigation

ユーザーが初めて設定ページに移動したときに、バック スタック エントリ (この場合はメイン ページ) を削除してみてください。

次のコードで、残りのバックスタック エントリを削除できます。

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    while (this.NavigationService.BackStack.Any())
    {
        this.NavigationService.RemoveBackEntry();
    }
}

そのため、ユーザーが戻るボタンを押すと、バックスタック エントリが残っていないため、アプリケーションは終了する必要があります。

于 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 に答える