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

前端之家收集整理的这篇文章主要介绍了如何拦截导航栏后退按钮单击Xamarin表单?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个xamarin表单页面,用户可以在表单中更新某些数据.我需要拦截导航栏后退按钮单击以警告用户是否有一些数据尚未保存.如何做?

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

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

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

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

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

解决方法

我能够通过覆盖FormsApplicationActivity中的以下方法显示可以取消导航的确认对话框.
  1. // navigation back button
  2. public override bool OnOptionsItemSelected(IMenuItem item)
  3. {
  4. if (item.ItemId == 16908332)
  5. {
  6. var currentviewmodel = (Iviewmodel)navigator.CurrentPage.BindingContext;
  7. currentviewmodel.CanNavigateFromAsync().ContinueWith(t =>
  8. {
  9. if (t.Result)
  10. {
  11. navigator.PopAsync();
  12. }
  13. },TaskScheduler.FromCurrentSynchronizationContext());
  14. return false;
  15. }
  16. else
  17. {
  18. return base.OnOptionsItemSelected(item);
  19. }
  20. }
  21.  
  22. // hardware back button
  23. public async override void OnBackPressed()
  24. {
  25. var currentviewmodel = (Iviewmodel)navigator.CurrentPage.BindingContext;
  26.  
  27. // could display a confirmation dialog (ex: "Cancel changes?")
  28. var canNavigate = await currentviewmodel.CanNavigateFromAsync();
  29. if (canNavigate)
  30. {
  31. base.OnBackPressed();
  32. }
  33. }

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

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

猜你在找的HTML相关文章