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

MAUI启动导航至SettingsPage抛出System.InvalidOperationException异常求助

解决方案

1. 不要在App构造函数中直接执行导航

App构造函数执行时,Shell组件还没完成初始化,此时调用Shell.Current.GoToAsync会因为ShellContent未加载完成抛出异常。把导航逻辑移到App的OnStart生命周期方法,或者Shell的Loaded事件里:

方法A:用App的OnStart方法

修改App.xaml.cs:

protected override void OnStart()
{
    _ = NavigateToSettingsPageAsync();
}

private async Task NavigateToSettingsPageAsync()
{
    await Shell.Current.GoToAsync(nameof(SettingsPage));
}

方法B:用Shell的Loaded事件

修改AppShell.xaml.cs:

public AppShell()
{
    InitializeComponent();
    Loaded += AppShell_Loaded;
}

private async void AppShell_Loaded(object sender, EventArgs e)
{
    await Shell.Current.GoToAsync(nameof(SettingsPage));
}

2. 检查ShellContent的层级配置

确保SettingsPage对应的ShellContent正确嵌套在FlyoutItem或TabBar中(这是MAUI Shell的推荐结构),不要直接作为Shell的子元素。示例配置:

<Shell>
    <FlyoutItem Title="设置" Icon="apps">
        <ShellContent
            ContentTemplate="{DataTemplate view:SettingsPage}"
            Route="SettingsPage"/>
    </FlyoutItem>
    <!-- 其他页面配置 -->
</Shell>

3. 验证路由名称匹配

确认导航时用的路由名称和ShellContent的Route属性完全一致。nameof(SettingsPage)返回的是页面类名,要保证你的页面类名确实是SettingsPage,且Route属性值和它完全匹配(大小写敏感)。

4. 临时 workaround:等待Shell初始化(可选)

如果以上方法仍有问题,可在导航前短暂延迟,确保Shell完成初始化:

private async Task NavigateToSettingsPageAsync()
{
    await Task.Delay(100);
    await Shell.Current.GoToAsync(nameof(SettingsPage));
}

(注:此方法为临时方案,优先推荐前两种生命周期方法)


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 04:22:41