在 MAUI Blazor 中禁用后退按钮功能

3
我有一个应用程序,使用MAUI + Blazor Hybrid创建并在Android上运行。该应用程序有两个页面:page1和page2。当用户从page1导航到page2时,他可以使用Android软件/硬件返回按钮返回page1。我想要的是在应用逻辑允许之前防止用户这样做。
在原生Android中,可以重写onBackPressed()来实现这一点。但在Blazor中,我找不到处理它的方法。我需要简单地阻止Back事件,而无需重新加载页面,闪烁或其他可能的副作用,例如未按下按钮。有一些JS hack,但它们会导致当前页面重新加载,这对我来说不合适。
那么,在MAUI + Blazor上是否有任何方法在Android上实现这种本机行为?

他们如何从第一页导航到第二页?那是一个在Blazor内容中的链接还是按钮?另一种方法(如果适用)是使用Maui工具栏或菜单栏,位于Blazor WebView的上方(或侧边)。然后导航将由Maui代码控制,并且您可以控制返回按钮的功能。 - ToolmakerSteve
这对于Android的返回按钮没有帮助。事件被传递到BlazorWebView中,我找不到阻止它的方法。 - Andrei Vinogradov
好的。听起来BlazorWebView已经在后退按钮上注册了自己。抱歉,我不知道如何阻止这种情况发生。 - ToolmakerSteve
1个回答

2

在Maui/Blazor类中似乎没有办法做到这一点(至少我找不到方法),当存在可返回导航时,MainPage.OnBackButtonPressed()不会被调用,而是自动向后导航。

不过,在MainActivity.cs中可以拦截它:

public override bool DispatchKeyEvent(KeyEvent e)
{
    // Workaround: The back button will automatically navigate back if possible, it is not
    // possible to intercept it in MainPage.OnBackButtonPressed().
    if ((e.KeyCode == Keycode.Back) && (e.Action == KeyEventActions.Down))
    {
        bool handled = TryCloseCurrentlyOpenMenusOrDialogs();
        if (handled)
            return true;
    }
    return base.DispatchKeyEvent(e);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接