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

MAUI Blazor中获取当前窗口并在当前窗口显示弹窗的问题

MAUI Blazor中获取当前窗口并在当前窗口显示弹窗的问题

我明白你的困扰啦——在MAUI Blazor里,不管在哪个窗口点击「显示弹窗」按钮,弹窗总是弹在第一个窗口里,对吧?这是因为Application.Current.MainPage只会指向你打开的第一个窗口的主页面,而每个新窗口都是独立的Window实例,它们各自有自己的Page对象,所以用旧方法根本拿不到当前操作的窗口。

下面给你一个简单可靠的解决方案:

核心思路

MAUI提供了Application.Current.ActiveWindow属性,它会返回当前用户正在操作的激活窗口——也就是你点击按钮的那个窗口。我们只需要拿到这个窗口对应的Page,就能在当前窗口显示弹窗了。

完整代码示例

把你的Blazor页面代码改成这样:

@page "/" 
@using Microsoft.JSInterop
@using Microsoft.AspNetCore.Components.Web
@using Microsoft.Maui.Controls

@inject IJSRuntime JS

<div class="row">
    <div class="col-md-4 mb-3">
        <button class="btn btn-primary" @onclick="CreateNewWindow">Create new window</button>
    </div>
    <div class="col-md-4 mb-3">
        <button class="btn btn-primary" @onclick="ShowAlert">Show alert!</button>
    </div>
</div>

@code {
    private async Task CreateNewWindow()
    {
        // 创建新窗口,这里假设你的主页面是MainPage(包含BlazorWebView)
        var newWindow = new Window(new MainPage());
        await Application.Current.OpenWindowAsync(newWindow);
    }

    private async Task ShowAlert()
    {
        // 获取当前激活的窗口
        var currentWindow = Application.Current.ActiveWindow;
        if (currentWindow != null)
        {
            // 获取当前窗口的主页面
            var currentPage = currentWindow.Page;
            if (currentPage != null)
            {
                // 在当前窗口的页面上显示弹窗
                await currentPage.DisplayAlert("提示", "这是当前窗口的弹窗!", "确定");
            }
        }
    }
}

关键说明

  1. 创建新窗口:点击「Create new window」时,我们创建一个新的Window实例,并传入你的Blazor主页面(这里用MainPage举例,你可以改成自己项目里的页面类名),然后用OpenWindowAsync打开它。
  2. 获取当前窗口:ActiveWindow会自动识别用户当前操作的窗口——不管是第一个窗口还是新建的窗口,只要用户在这个窗口里点击按钮,它就会指向这个窗口。
  3. 显示弹窗:拿到当前窗口的Page后,调用DisplayAlert就能在当前窗口弹出提示框了。

注意事项

  • 确保你的主页面(比如MainPage)里已经正确配置了BlazorWebView,这样新窗口才能正常加载Blazor内容。
  • 如果你的项目结构不同,只需要调整new Window(new MainPage())里的页面类即可。

备注:内容来源于stack exchange,提问作者Maksym Shymchenko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 11:24:40