@@ -610,6 +610,30 @@ public async Task Navigation_FromFlyoutPageUsingRoute()
610610 Assert . IsType < MockViewB > ( mockHome . Detail ) ;
611611 }
612612
613+ [ Fact ]
614+ public async Task Navigation_FromModal ( )
615+ {
616+ var mauiApp = CreateBuilder ( prism => prism . CreateWindow ( "NavigationPage/MockViewA" ) )
617+ . Build ( ) ;
618+ var window = GetWindow ( mauiApp ) ;
619+ var navigationPage = ( NavigationPage ) window . Page ;
620+ var currentNavigationStackUri = string . Join ( "/" , navigationPage . Navigation . NavigationStack . Select ( v => v . GetType ( ) . Name ) ) ;
621+ Assert . Equal ( "MockViewA" , currentNavigationStackUri ) ;
622+
623+ var navigationService = Prism . Navigation . Xaml . Navigation . GetNavigationService ( window . CurrentPage ) ;
624+ await navigationService . NavigateAsync ( "MockViewB/MockViewC" , new NavigationParameters { { KnownNavigationParameters . UseModalNavigation , true } } ) ;
625+ var currentModalStackUri = string . Join ( "/" , window . CurrentPage . Navigation . ModalStack . Select ( v => v . GetType ( ) . Name ) ) ;
626+ Assert . Equal ( "MockViewB/MockViewC" , currentModalStackUri ) ;
627+
628+ var result = await navigationService . NavigateFromAsync ( "MockViewB" , UriParsingHelper . Parse ( "MockViewD" ) , null ) ;
629+
630+ Assert . True ( result . Success ) ;
631+ currentNavigationStackUri = string . Join ( "/" , navigationPage . Navigation . NavigationStack . Select ( v => v . GetType ( ) . Name ) ) ;
632+ Assert . Equal ( "MockViewA" , currentNavigationStackUri ) ;
633+ currentModalStackUri = string . Join ( "/" , navigationPage . Navigation . ModalStack . Select ( v => v . GetType ( ) . Name ) ) ;
634+ Assert . Equal ( "MockViewB/MockViewD" , currentModalStackUri ) ;
635+ }
636+
613637 [ Theory ]
614638 [ InlineData ( "MockViewA" , "MockViewB" , null ) ]
615639 [ InlineData ( "NavigationPage/MockViewA" , "MockViewB?useModalNavigation=true" , true ) ]
0 commit comments