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
相关产品推荐
相关产品推荐

