如何从Xamarin.Forms弹出窗口导航回退

如何从Xamarin.Forms弹出窗口导航回退,xamarin.forms,navigation,prism,Xamarin.forms,Navigation,Prism,使用Prism Navigation back的Xamarin.forms在以下场景中不起作用: OnInitializedNavigationService.NavigateAsync(nameof(LoginView))中的App.xaml.cs 登录后,在LoginViewModel中,我将导航到MainPageWait\u navigationService.NavigateAsync(新Uri(“MainPage”,UriKind.Relative),useModalNavigatio

使用Prism Navigation back的Xamarin.forms在以下场景中不起作用:

  • OnInitialized
    NavigationService.NavigateAsync(nameof(LoginView))中的App.xaml.cs
  • 登录后,在LoginViewModel中,我将导航到MainPage
    Wait\u navigationService.NavigateAsync(新Uri(“MainPage”,UriKind.Relative),useModalNavigation:true,动画:false)
  • MainPaga有一个按钮,一旦我点击按钮,它将弹出设置页面导航弹出窗口,如:
    wait\u navigationService.NavigateAsync(新Uri(“SettingView”,UriKind.Relative),useModalNavigation:true,动画:false)
  • SettingView(弹出窗口)有一个按钮(注销),一旦我点击按钮(注销),它必须返回LoginView,这是返回的代码

                    await _navigationService.ClearPopupStackAsync(animated: false);
                await _navigationService.GoBackAsync(useModalNavigation: true, animated: false);
    

  • 首先我清除弹出窗口,然后导航回,但如果您使用PRISM并希望“清除”当前堆栈,它将不会导航回LoginView?

    。 最好使用显式uri导航。 这意味着注销按钮后面的代码应该如下所示

    await _navigationService.NavigateAsync("/NavigationPage/LoginView");
    
    await NavigationService.NavigateAsync(new System.Uri("/LoginPage",System.UriKind.Absolute));
    

    通过在URI的开头添加/,当前堆栈将被清除。

    如果您正在使用PRISM并希望“清除”当前堆栈。 最好使用显式uri导航。 这意味着注销按钮后面的代码应该如下所示

    await _navigationService.NavigateAsync("/NavigationPage/LoginView");
    
    await NavigationService.NavigateAsync(new System.Uri("/LoginPage",System.UriKind.Absolute));
    

    通过在URI的开头添加/,当前堆栈将被清除。

    在用户确认这样注销后,您应该使用绝对URI将登录页面设置为主页面

    await _navigationService.NavigateAsync("/NavigationPage/LoginView");
    
    await NavigationService.NavigateAsync(new System.Uri("/LoginPage",System.UriKind.Absolute));
    

    在用户确认这样注销后,您应该使用绝对uri将Loginpage设置为Mainpage

    await _navigationService.NavigateAsync("/NavigationPage/LoginView");
    
    await NavigationService.NavigateAsync(new System.Uri("/LoginPage",System.UriKind.Absolute));
    

    如果ClearPopupStackAsync,不是所有页面都会从堆栈中弹出吗?所以没有LoginView可返回。那么我如何从弹出页面返回?如果清除PopupsTackAsync,不是所有页面都会从堆栈中弹出吗?所以没有LoginView可以返回。那么我如何从弹出页面返回?嗨@Depechie,谢谢你的回复。这是工作,但唯一的问题是它在NavigationPage下,所以显示TopBar,这是我想要的问题,就像模态一样,我们可以实现吗?在LoginView的构造函数中,你可以放:NavigationPage.SetHasNavigationBar(此为false);隐藏导航栏。我这样做是在等待_navigationService.NavigateAsync(“/NavigationPage/LoginView”,param,useModalNavigation:true);是的,这是正确的,但如果使用NavigationPage,则仍会显示顶部栏,直到使用NavigationPage.SetHasNavigationBar禁用它(此为假);方法。我正在创建GitHub存储库,一旦它上传到这里,您就可以检查它出了什么问题!同时我接受您的回答非常感谢您的快速支持。嗨@Depechie,谢谢您的回复这是工作,但唯一的问题是它在NavigationPage下,所以显示TopBar这是一个问题,我希望它像Modal,c一样我们实现了吗?在LoginView的构造函数中,您可以放置:NavigationPage.SetHasNavigationBar(这个,false);隐藏导航栏。我这样做是为了等待_navigationService.NavigateAsync(“/NavigationPage/LoginView”,参数,useModalNavigation:true);是的,这是正确的,但如果您使用NavigationPage,则仍会显示顶部栏,直到您使用NavigationPage.SetHasNavigationBar禁用它(此项为false);方法。我正在创建GitHub存储库,一旦它上传到这里,您就可以检查它出了什么问题!同时我接受您的回答非常感谢您的快速支持。