如何在MAUI应用程序中覆盖设备返回按钮?



我在MAUI中有一个应用程序和一个页面,我想在其中重写按钮的返回按钮,以检查是否设置了一些参数,然后才允许返回。

我在文档中看到过这段代码:

<Shell.BackButtonBehavior>
<BackButtonBehavior Command="{Binding VBackCommand}" />
</Shell.BackButtonBehavior>

它工作了,我的视图模型中的命令被执行了,但是如果我使用系统的返回按钮,我可以在不运行命令的情况下返回。

是否有办法拦截系统的后退按钮?

谢谢。

我做了一个演示来控制系统返回按钮的BackButtonBehavior。

假设有一个按钮点击事件处理程序,我们使用它从MainPage导航到另一个页面:

private void OnCounterClicked(object sender, EventArgs e)
{
Shell.Current.Navigation.PushAsync(new NewPage1());
}

在NewPage1 xaml中,你已经定义了BackButtonBehavior:

<Shell.BackButtonBehavior>
<BackButtonBehavior Command="{Binding VBackCommand}" />
</Shell.BackButtonBehavior>

因此,当按下后退按钮时,ViewModel中的命令集将执行。您可以通过使用MessagingCenter或WeakReferenceMessenger发送消息来控制导航。

public Command VBackCommand
{
get
{
return new Command(() =>
{
Console.WriteLine("123");
// if parameter are set, you could send a message to navigate
if (ParameterSet)
{
MessagingCenter.Send<NewPageViewModel>(this, "Hi");
}
});
}
}

在newpage1。cs中,订阅消息和popasync

public NewPage1()
{
InitializeComponent();
this.BindingContext = new NewPageViewModel();
MessagingCenter.Subscribe<NewPageViewModel>(this, "Hi", (sender) =>
{
Shell.Current.Navigation.PopAsync();
});
}

这个效果是你想要的吗?如果你有什么问题,请提出来。

相关内容

  • 没有找到相关文章

最新更新