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("提示", "这是当前窗口的弹窗!", "确定"); } } } }
关键说明
- 创建新窗口:点击「Create new window」时,我们创建一个新的
Window实例,并传入你的Blazor主页面(这里用MainPage举例,你可以改成自己项目里的页面类名),然后用OpenWindowAsync打开它。 - 获取当前窗口:
ActiveWindow会自动识别用户当前操作的窗口——不管是第一个窗口还是新建的窗口,只要用户在这个窗口里点击按钮,它就会指向这个窗口。 - 显示弹窗:拿到当前窗口的
Page后,调用DisplayAlert就能在当前窗口弹出提示框了。
注意事项
- 确保你的主页面(比如
MainPage)里已经正确配置了BlazorWebView,这样新窗口才能正常加载Blazor内容。 - 如果你的项目结构不同,只需要调整
new Window(new MainPage())里的页面类即可。
备注:内容来源于stack exchange,提问作者Maksym Shymchenko
相关产品推荐
相关产品推荐

