如何拦截导航栏后退按钮单击Xamarin表单?

如何拦截导航栏后退按钮单击Xamarin表单?,第1张

概述我有一个xamarin表单页面,用户可以在表单中更新某些数据.我需要拦截导航栏后退按钮单击以警告用户是否有一些数据尚未保存.如何做? 我能够使用Android.MainActivity.OnBackPressed()拦截在Android中单击的硬件栏后退按钮,但该事件仅在硬件栏上单击按钮时单击,而不是单击导航栏后退按钮. 我也尝试覆盖Xamarin.Forms.NavigationPageOnBa 我有一个xamarin表单页面,用户可以在表单中更新某些数据.我需要拦截导航栏后退按钮单击以警告用户是否有一些数据尚未保存.如何做?

我能够使用AndroID.MainActivity.OnBackpressed()拦截在AndroID中单击的硬件栏后退按钮,但该事件仅在硬件栏上单击按钮时单击,而不是单击导航栏后退按钮.

我也尝试覆盖Xamarin.Forms.NavigationPageOnBackbuttonpressed()但它不起作用.为什么?
有谁已经解决了这个问题?

我也试过重写Ondisappear(),有两个问题:

>页面已经在视觉上消失了,所以“你确定吗?”对话框出现在上一页上.
>无法取消后退动作.

那么,是否可以截取导航栏后退按钮?

解决方法 我能够通过覆盖FormsApplicationActivity中的以下方法来显示可以取消导航的确认对话框.
// navigation back button  public overrIDe bool OnoptionsItemSelected(IMenuItem item)  {     if (item.ItemID == 16908332)     {        var currentviewmodel = (Iviewmodel)navigator.CurrentPage.BindingContext;        currentviewmodel.CanNavigateFromAsync().ContinueWith(t =>        {           if (t.Result)           {              navigator.PopAsync();           }        },TaskScheduler.FromCurrentSynchronizationContext());        return false;     }     else     {        return base.OnoptionsItemSelected(item);     }  }  // harDWare back button  public async overrIDe voID OnBackpressed()  {     var currentviewmodel = (Iviewmodel)navigator.CurrentPage.BindingContext;     // Could display a confirmation dialog (ex: "Cancel changes?")     var canNavigate = await currentviewmodel.CanNavigateFromAsync();     if (canNavigate)     {        base.OnBackpressed();     }  }

navigator.CurrentPage是INavigation服务的包装器.我不必从模态页面取消导航,所以我只处理NavigationStack.

this.navigation.NavigationStack[this.navigation.NavigationStack.Count - 1];
总结

以上是内存溢出为你收集整理的如何拦截导航栏后退按钮单击Xamarin表单?全部内容,希望文章能够帮你解决如何拦截导航栏后退按钮单击Xamarin表单?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1102364.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存