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

如何从MAUI XAML页面导航至Blazor页面?

解决MAUI XAML页面导航回Blazor组件的问题

核心原因

NavigationManager是Blazor专属的导航服务,仅在Blazor组件上下文内才能直接驱动界面切换。在MAUI的XAML代码-behind中直接调用,无法触发Blazor宿主页面的导航更新,所以断点会触发但界面无变化。

解决方案

方法1:通过Blazor宿主页面中转导航

  1. 确认项目中存在包含BlazorWebView控件的Blazor宿主页面(比如MainBlazorPage.xaml)
  2. 在XAML页面的代码-behind中,获取Blazor宿主页面实例并调用导航:
// 假设Blazor宿主页面类型为MainBlazorPage
var blazorHostPage = App.Current.MainPage.Navigation.NavigationStack.OfType<MainBlazorPage>().FirstOrDefault();
if (blazorHostPage != null)
{
    // 从BlazorWebView的服务容器中获取NavigationManager
    var navigationManager = blazorHostPage.BlazorWebView.Services.GetService<NavigationManager>();
    navigationManager.NavigateTo("/myBlazorPage");
    // 关闭之前打开的MAUI模态页
    await App.Current.MainPage.Navigation.PopModalAsync();
}

方法2:用事件通知Blazor组件触发导航

  1. 在共享类库中定义静态导航事件:
public static class NavigationEvents
{
    public static event Action<string> NavigateToBlazorPage;
    public static void RaiseNavigateToBlazorPage(string uri)
    {
        NavigateToBlazorPage?.Invoke(uri);
    }
}
  1. 在根Blazor组件(比如MainLayout.razor)中订阅事件:
@inject NavigationManager NavManager

@code {
    protected override void OnInitialized()
    {
        NavigationEvents.NavigateToBlazorPage += uri => NavManager.NavigateTo(uri);
        base.OnInitialized();
    }

    public void Dispose()
    {
        NavigationEvents.NavigateToBlazorPage -= uri => NavManager.NavigateTo(uri);
    }
}
  1. 在MAUI XAML页面代码-behind中触发事件:
// 先关闭当前MAUI模态页
await App.Current.MainPage.Navigation.PopModalAsync();
// 触发Blazor导航事件
NavigationEvents.RaiseNavigateToBlazorPage("/myBlazorPage");

方法3:直接操作BlazorWebView导航

如果MAUI页面是Blazor宿主页面之上的模态页,可直接获取BlazorWebView控件进行导航:

// 需提前给BlazorWebView设置x:Name="MyBlazorWebView"
var blazorWebView = App.Current.MainPage.FindByName<BlazorWebView>("MyBlazorWebView");
if (blazorWebView != null)
{
    await App.Current.MainPage.Navigation.PopModalAsync();
    blazorWebView.NavigateTo("/myBlazorPage");
}

关键提示

  • 反向导航时必须先关闭MAUI模态页,否则Blazor页面会被遮挡。
  • NavigationManager必须从Blazor的服务容器中获取,不能手动实例化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:46:03