You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置.NET Maui避免页面复用,每次导航创建新页面?

在.NET Maui中实现每次导航创建新页面实例的方法

.NET Maui Shell默认会复用已创建的页面实例,要修改这个行为,让每次导航都生成新实例,可通过以下几种方式实现:

1. 导航时添加reuse=false参数

在使用Shell导航时,直接在路由URI后追加?reuse=false参数,强制框架创建新实例:

await Shell.Current.GoToAsync("//YourTargetPage?reuse=false");

这个参数会覆盖Shell的默认复用逻辑,每次触发导航都会初始化新的页面对象。

2. 使用ContentTemplate注册Shell路由

在XAML中配置Shell路由时,避免直接设置ShellContent的Content属性(该方式会创建单一实例复用),改用ContentTemplate:

<ShellContent 
    Title="目标页面" 
    ContentTemplate="{DataTemplate local:YourTargetPage}" 
    Route="YourTargetPage" />

ContentTemplate会在每次导航时通过模板实例化新的页面,从根源上避免实例复用。

3. 手动创建页面实例并导航

绕过Shell的路由复用机制,直接手动初始化页面实例后调用导航方法:

var newPageInstance = new YourTargetPage();
await Shell.Current.Navigation.PushAsync(newPageInstance);

这种方式完全由开发者控制实例创建,确保每次导航都是全新的页面对象。

验证方法

可以在目标页面的构造函数中添加日志输出,比如:

public YourTargetPage()
{
    InitializeComponent();
    Console.WriteLine($"页面实例创建:{Guid.NewGuid()}");
}

每次导航时查看控制台输出,若每次生成的GUID不同,说明已成功创建新实例。

以上方法均可有效规避页面复用可能带来的控件状态残留问题,适配你提到的Xamarin.Forms遗留问题的提前规避需求。

内容的提问来源于stack exchange,提问作者Ken K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:00:56