mirror of
https://github.com/PrismLibrary/Prism.git
synced 2026-10-29 13:38:03 +08:00
fix: merge parameters for segments
This commit is contained in:
@@ -403,7 +403,7 @@ public class PageNavigationService : INavigationService, IRegistryAware
|
||||
|
||||
var nextSegment = segments.Dequeue();
|
||||
|
||||
var pageParameters = UriParsingHelper.GetSegmentParameters(nextSegment);
|
||||
var pageParameters = UriParsingHelper.GetSegmentParameters(nextSegment, parameters);
|
||||
|
||||
if (pageParameters.TryGetValue<bool>(KnownNavigationParameters.UseModalNavigation, out var parameterModal))
|
||||
useModalNavigation = parameterModal;
|
||||
@@ -604,7 +604,7 @@ public class PageNavigationService : INavigationService, IRegistryAware
|
||||
{
|
||||
if (nextSegment.Contains(KnownNavigationParameters.SelectedTab))
|
||||
{
|
||||
var segmentParams = UriParsingHelper.GetSegmentParameters(nextSegment);
|
||||
var segmentParams = UriParsingHelper.GetSegmentParameters(nextSegment, parameters);
|
||||
SelectPageTab(topPage, segmentParams);
|
||||
}
|
||||
});
|
||||
@@ -706,7 +706,7 @@ public class PageNavigationService : INavigationService, IRegistryAware
|
||||
{
|
||||
if (detail is TabbedPage && nextSegment.Contains(KnownNavigationParameters.SelectedTab))
|
||||
{
|
||||
var segmentParams = UriParsingHelper.GetSegmentParameters(nextSegment);
|
||||
var segmentParams = UriParsingHelper.GetSegmentParameters(nextSegment, parameters);
|
||||
SelectPageTab(detail, segmentParams);
|
||||
}
|
||||
|
||||
@@ -891,7 +891,7 @@ public class PageNavigationService : INavigationService, IRegistryAware
|
||||
|
||||
async Task ConfigureTabbedPage(TabbedPage tabbedPage, string segment, INavigationParameters parameters)
|
||||
{
|
||||
var tabParameters = UriParsingHelper.GetSegmentParameters(segment);
|
||||
var tabParameters = UriParsingHelper.GetSegmentParameters(segment, parameters);
|
||||
|
||||
var tabsToCreate = tabParameters.GetValues<string>(KnownNavigationParameters.CreateTab);
|
||||
foreach (var tabToCreateEncoded in tabsToCreate ?? Array.Empty<string>())
|
||||
@@ -1029,7 +1029,7 @@ public class PageNavigationService : INavigationService, IRegistryAware
|
||||
}
|
||||
|
||||
//if any page decide to go modal, we need to consider it and all pages after it an illegal page
|
||||
var pageParameters = UriParsingHelper.GetSegmentParameters(item);
|
||||
var pageParameters = UriParsingHelper.GetSegmentParameters(item, parameters);
|
||||
if (pageParameters.ContainsKey(KnownNavigationParameters.UseModalNavigation))
|
||||
{
|
||||
if (pageParameters.GetValue<bool>(KnownNavigationParameters.UseModalNavigation))
|
||||
|
||||
@@ -548,6 +548,29 @@ public class NavigationTests : TestBase
|
||||
Assert.True(PageNavigationService.UseModalNavigation(push.CurrentPage, useModalNavigation));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task PushesModally_From_NavigationParameters()
|
||||
{
|
||||
var mauiApp = CreateBuilder(prism => prism
|
||||
.CreateWindow(n => n.NavigateAsync("NavigationPage/MockViewA")))
|
||||
.Build();
|
||||
var window = GetWindow(mauiApp);
|
||||
var page = window.Page;
|
||||
if (page is NavigationPage navPage)
|
||||
page = navPage.RootPage;
|
||||
|
||||
var navService = Prism.Navigation.Xaml.Navigation.GetNavigationService(page);
|
||||
|
||||
var result = await navService.NavigateAsync("MockViewB", new NavigationParameters { { KnownNavigationParameters.UseModalNavigation, true } });
|
||||
Assert.True(result.Success);
|
||||
|
||||
var pushes = navService.GetPushes();
|
||||
Assert.Single(pushes);
|
||||
var push = pushes[0];
|
||||
|
||||
Assert.True(push.UseModalNavigation);
|
||||
}
|
||||
|
||||
private static void TestPage(Page page)
|
||||
{
|
||||
Assert.NotNull(page.BindingContext);
|
||||
|
||||
Reference in New Issue
Block a user