How do I navigate back without losing the title bar or going through all the previous pages first?
Is there any way to skip all of the "inbetween" pages and navigate straight back to the first page from the last page in the navigation stack in my .NET MAUI application? (and doing this without showing the animations of all the previous "modal style" pages?)

Here's what I am trying to do:

                ItemDetailsPage
               /
              /
ItemListPage /
             \
              \
               \
                NewItemStep1 ____ NewItemStep2 ____ NewItemStep3 ____ ItemDetailsPage

ItemListPage人中,你可以做两件事:

  1. ItemDetailsPage或...上显示商品
  2. 用3个步骤创建一个新项目:从NewItemStep1NewItemStep2再到NewItemStep3,最后到ItemDetailsPage,显示您新创建的新项目.

现在,我想要从ItemDetailsPage返回到ItemListPage,而不是使"介于"模式样式的页面具有动画效果.因此,基本上只需直接转到一个新页面并对其进行动画处理,但不要以动画方式删除导航堆栈中介于两者之间的任何其他页面.

Here's what I've tried so far:
On the last page (Step 3 page):

Dictionary<string, object> Params = new() {
    {"Item", Item } 
};

await Shell.Current.GoToAsync($"{nameof(ItemDetailsPage)}", Params);

这将导航到ItemDetailsPage,并如预期的那样显示创建的项目!但现在ItemDetailsPage没有标题栏,因此根本没有后退按钮来返回任何页面.我认为这在某种程度上扰乱了导航堆栈.

Dictionary<string, object> Params = new() {
    {"Item", Item } 
};

await Shell.Current.GoToAsync($"//{nameof(ItemListPage)}");
await Shell.Current.GoToAsync($"{nameof(ItemDetailsPage)}", Params);

这将导航到ItemDetailsPage也显示创建的项目,with标题栏(和后退按钮)直接返回ItemListPage.太棒了!但这样做将从all the way back转到Step3,然后是Step2,然后是Step1,然后是ItemListPage,显示所有这些页面都是屏幕上的动画,最后以ItemDetailsPage结束,以显示所创建的项目.这就是我希望它如何工作,但without通过前面的(1,2,3)步页面首先.

推荐答案

PopToRootAsync采用控制动画的可选参数.默认为true(动画).[现在我想起来,当弹出多个页面时,感觉像是一个可疑的默认设置.但它与其他导航方法一致.]

要跳过动画,请执行以下操作:

await Shell.Current.Navigation.PopToRootAsync(false);

对于GoToAsync,存在相同的可选参数:

await Shell.Current.GoToAsync($"{nameof(ItemDetailsPage)}", false, Params);

要使ItemDetailsPage具有Back按钮,其路由需要将ItemListPage作为其根.

请参阅https://stackoverflow.com/a/76741424/199364中的"导航类型3:shell 导航".

假设ItemListPageItemListPage号公路,大概是这样的:

Routing.RegisterRoute("ItemListPage/ItemDetailsPage", typeof(ItemDetailsPage));
await Shell.Current.Navigation.PopToRootAsync(false);
await Shell.Current.GoToAsync("//ItemListPage/ItemDetailsPage");

I think this will show ItemListPage momentarily (no animation),
then animate to ItemDetailsPage, with back button.

考虑到Shell的设计,我认为不可能从一个非根页面直接动画到另一个非根页面.(每个选项卡都是一个"根".)尤其是因为你想要"返回"到根.

Csharp相关问答推荐

如何在C#中使用并行主义将数据表转换为动态对象

Plotly.NET访问互联网时出现异常

如何在Reflection. Emit中使用具有运行时定义的类型参数的泛型类型

读取配置文件(mytest. exe. config)

如何修改中间件或其注册以正确使用作用域服务?

将轮询与超时同步

如何在不考虑年份的情况下判断日期时间是否在某个日期范围内?

只有第一个LINQ.Count()语句有效

如何在实体框架中添加包含列表?

如何通过寻找向量长度来优化两个循环?

Polly重试URL复制值

HelperText属性不支持复杂内容(混合C#和标记)

RX操作员使用先前值进行扫描,信号来自值本身

.NET8Blazor-为什么Rapzor渲染在for循环之后显示?

使用Blazor WebAssembly提高初始页面加载时间的性能

Visual Studio 17.8.0制表符自动完成问题--三缩进

c#在后台实现类型化数组

如何消除Visual Studio错误,因为它不识别集合表达式的新C#12语法?

try 访问字典中的模拟对象时引发KeyNotFoundException

除非首先访问使用的终结点,否则本地API上的终结点不起作用