Xamarin.forms: 无法拦截软件后退按钮

创建于 2018-02-22  ·  53评论  ·  资料来源: xamarin/Xamarin.Forms

描述

软件后退按钮不使用与硬件后退按钮相同的代码路径。 这会导致 Android 上出现意外行为(以及我所阅读的内容,iOS)。

重现步骤

  1. 覆盖 MasterDetailPage 上的“OnBackButtonPressed()”方法。
  2. 在 Android 上运行应用程序并导航到 MasterDetailPage 中的详细信息页面。
  3. 按命令栏上的“返回”箭头。

预期行为

应调用“OnBackButtonPressed()”方法,与按下硬件“后退”按钮时相同。

实际行为

不调用该方法。

基本信息

  • 有问题的版本:
  • 最后已知的好版本:未知
  • IDE:Visual Studio 2017
  • 平台目标框架:

    • 安卓:8.0 奥利奥

    • UWP:UWP 16299(工作正常!)

  • 安卓支持库版本:v7/v4
  • Nuget 包:

NETStandard.Library {2.0.1} SQLite.Net.Standard
System.ServiceModel.Primitives {4.4.1} Adapt.Model.Helpdesk
NETStandard.Library {2.0.1} Adapt.Model.Helpdesk
System.Runtime.Serialization.Pri... {4.3.0} Adapt.Model.Helpdesk
System.ServiceModel.Http {4.4.1} Adapt.XivicClient.Standard
System.Reflection.TypeExtensions {4.4.0} Adapt.XivicClient.Standard
System.ServiceModel.Primitives {4.4.1} Adapt.XivicClient.Standard
NETStandard.Library {2.0.1} Adapt.XivicClient.Standard
System.Runtime.Serialization.Pri... {4.3.0} Adapt.XivicClient.Standard
System.ServiceModel.Primitives {4.4.1} Adapt.Model.Common.Standard
NETStandard.Library {2.0.1} Adapt.Model.Common.Standard
System.Runtime.Serialization.Pri... {4.3.0} Adapt.Model.Common.Standard
NETStandard.Library {2.0.1} Adapt.Presentation.Standard
Xamarin.Forms {2.5.0.280555} Adapt.Presentation.Standard
System.ServiceModel.Http {4.4.1} Adapt.XivicClient.Database.Standard
System.ServiceModel.Primitives {4.4.1} Adapt.XivicClient.Database.Standard
NETStandard.Library {2.0.1} Adapt.XivicClient.Database.Standard
System.Runtime.Serialization.Pri... {4.3.0} Adapt.XivicClient.Database.Standard
System.ServiceModel.Primitives {4.4.1} Adapt.Model.Whakatane
NETStandard.Library {2.0.1} Adapt.Model.Whakatane
System.Runtime.Serialization.Pri... {4.3.0} Adapt.Model.Whakatane
NETStandard.Library {2.0.1} Adapt.Business.Standard
Microsoft.CSharp {4.4.1} Adapt.Business.Standard
System.ServiceModel.Primitives {4.4.1} Adapt.Data.Generic.Standard
NETStandard.Library {2.0.1} Adapt.Data.Generic.Standard
System.Runtime.Serialization.Pri... {4.3.0} Adapt.Data.Generic.Standard
Xamarin.Forms.Maps {2.5.0.280555} Adapt.Presentation.XamarinForms
NETStandard.Library {2.0.1} Adapt.Presentation.XamarinForms
Syncfusion.Xamarin.SfDataGrid {15.4.0.20} Adapt.Presentation.XamarinForms
Xamarin.Forms {2.5.0.280555} Adapt.Presentation.XamarinForms
Xamarin.Android.Arch.Core.Common {1.0.0} Adapt.Presentation.Android
Xamarin.Android.Arch.Lifecycle.C... {1.0.1} Adapt.Presentation.Android
Xamarin.Android.Arch.Lifecycle.R... {1.0.0} Adapt.Presentation.Android
Xamarin.Android.Support.Animated... {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Annotations {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Compat {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Core.UI {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Core.Utils {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Design {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Fragment {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Media.Co... {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Transition {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.v4 {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.v7.AppCo... {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.v7.CardView {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.v7.Media... {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.v7.Palette {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.v7.Recyc... {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Vector.D ... {26.1.0.1} Adapt.Presentation.Android
Xamarin.Forms {2.5.0.280555} Adapt.Presentation.Android
Xamarin.Forms {2.5.0.280555} Adapt.Presentation.iOS
Microsoft.NETCore.UniversalWindo... {6.0.7} Adapt.Presentation.UWP
Xamarin.Forms {2.5.0.280555} Adapt.Presentation.UWP
Esri.ArcGISRuntime.Xamarin.Android {100.2.0} Adapt.Presentation.Xivic.Android
Esri.ArcGISRuntime.Xamarin.Forms {100.2.0} Adapt.Presentation.Xivic.Android
Microsoft.NETCore.Platforms {2.0.1} Adapt.Presentation.Xivic.Android
NETStandard.Library {2.0.1} Adapt.Presentation.Xivic.Android
Syncfusion.Xamarin.Core {15.4.0.20} Adapt.Presentation.Xivic.Android
Syncfusion.Xamarin.GridCommon {15.4.0.20} Adapt.Presentation.Xivic.Android
Syncfusion.Xamarin.SfDataGrid {15.4.0.20} Adapt.Presentation.Xivic.Android
Syncfusion.Xamarin.SfDataGrid.An... {15.4.0.20} Adapt.Presentation.Xivic.Android
Syncfusion.Xamarin.SfNumericTextBox {15.4.0.20} Adapt.Presentation.Xivic.Android
Syncfusion.Xamarin.SfNumericText ... {15.4.0.20} Adapt.Presentation.Xivic.Android
Xamarin.Android.Arch.Core.Common {1.0.0} Adapt.Presentation.Xivic.Android
Xamarin.Android.Arch.Lifecycle.C... {1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Arch.Lifecycle.R ... {1.0.0} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Animated... {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Annotations {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Compat {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Core.UI {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Core.Utils {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Design {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Fragment {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Media.Co... {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Transition {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.v4 {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.v7.AppCo... {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.v7.CardView {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.v7.Media... {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.v7.Palette {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.v7.Recyc... {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Vector.D ... {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Build.Download {0.4.7} Adapt.Presentation.Xivic.Android
Xamarin.Forms {2.5.0.280555} Adapt.Presentation.Xivic.Android
Xamarin.Forms.Maps {2.5.0.280555} Adapt.Presentation.Xivic.Android
Xamarin.GooglePlayServices.Base {60.1142.0} Adapt.Presentation.Xivic.Android
Xamarin.GooglePlayServices.Basement {60.1142.0} Adapt.Presentation.Xivic.Android
Xamarin.GooglePlayServices.Maps {60.1142.0} Adapt.Presentation.Xivic.Android
Xamarin.GooglePlayServices.Tasks {60.1142.0} Adapt.Presentation.Xivic.Android
Esri.ArcGISRuntime.Xamarin.Forms {100.2.0} Adapt.Presentation.Xivic.iOS
Esri.ArcGISRuntime.Xamarin.iOS {100.2.0} Adapt.Presentation.Xivic.iOS
Syncfusion.Xamarin.Core {15.4.0.20} Adapt.Presentation.Xivic.iOS
Syncfusion.Xamarin.GridCommon {15.4.0.20} Adapt.Presentation.Xivic.iOS
Syncfusion.Xamarin.SfDataGrid {15.4.0.20} Adapt.Presentation.Xivic.iOS
Syncfusion.Xamarin.SfNumericTextBox {15.4.0.20} Adapt.Presentation.Xivic.iOS
Xamarin.Forms {2.5.0.280555} Adapt.Presentation.Xivic.iOS
Xamarin.Forms.Maps {2.5.0.280555} Adapt.Presentation.Xivic.iOS
Esri.ArcGISRuntime.UWP {100.2.0} Adapt.Presentation.Xivic.UWP
Esri.ArcGISRuntime.Xamarin.Forms {100.2.0} Adapt.Presentation.Xivic.UWP
Microsoft.NETCore.UniversalWindo... {6.0.7} Adapt.Presentation.Xivic.UWP
Syncfusion.Xamarin.SfDataGrid {15.4.0.20} Adapt.Presentation.Xivic.UWP
System.Runtime.Serialization.Pri... {4.3.0} Adapt.Presentation.Xivic.UWP
Xamarin.Forms.Maps {2.5.0.280555} Adapt.Presentation.Xivic.UWP

  • 受影响的设备:HTC U11

复制链接

如果被要求将提供。

backbutton high impact proposal-open enhancement ➕

最有用的评论

有什么办法可以提高优先级?
多年来我一直有解决方法,有时不再起作用,......
我目前的解决方法也是一个非常糟糕的 hack,有缺点,很想永久删除我的自定义导航页面渲染器并修复过程中的一些问题。

所有53条评论

@samhouts是的,这正是我们的问题。 上述回调需要添加到代码库中,或者需要增强现有方法以包含来自软件后退按钮的事件。

@samhouts这个错误被接受了吗? 这是一个大问题。 还需要什么信息?

我同意 OnBackButtonPressed 应该同时处理 Hard-BackButtonss 和 Software-BackButtonss 的观点。 尽管如此,要拦截他们两个并不难。 我在这里写了关于该主题的博客: https :

@MSiccDev如果我们继续解决框架提出的问题,那么它永远不会得到修复,人们将不得不一遍又一遍地自己做这件事,直到技术消亡。

@AceCoderLaura 一方面是真的。 另一方面,必须向前迈进。 最好的办法是解决但报告问题。

这些解决方法打破了根页面上的汉堡菜单......
-.-

@AceCoderLaura我在我的一个带有 MD-Page 的应用程序中使用它,没有任何问题......

@MSiccDev
这是我的hacky解决方法:

public override bool OnOptionsItemSelected(IMenuItem item) 
{ 
            //If it's not the "home" button continue as usual 
            var androidHomeId = 16908332; 
            if (item.ItemId != Resource.Id.home && item.ItemId != androidHomeId) return base.OnOptionsItemSelected(item); 

            var navigation = App.MainMasterDetailPage.Detail.Navigation; 
            if (navigation.NavigationStack.Count > 1) 
            { 
                //We can go back, do the arrow functionality 
                this.OnBackPressed();
                return true;
            } 
            else 
            { 
                //We're at the root, do the hamburger functionality 
                return App.MainMasterDetailPage.IsPresented = true; 
            } 
}

@AceCoderLaura单击导航返回按钮 oO 后是否触发了您的 OnOptionsItemSelected 在我的情况下,什么也没发生...(Android)

这个问题有进展吗? 我有多个嵌套的导航视图,在我的应用程序中修补它会非常麻烦。 我同意@AceCoderLaura这必须由 xamarin 修补。

同样的问题。 我认为在企业应用程序中处理 back 事件是很常见的。 应该尽快修复。

请解决这个问题,它已经被报道了将近一年,现在还没有它是荒谬的。

@ddobrev你说得对,这是一个非常有用的功能,但不幸的是,它甚至没有明确定义它需要如何工作。 上面有人提到过,但没有得到回应:

是的,这正是我们的问题。 上述回调需要添加到代码库中,或者需要增强现有方法以包含来自软件后退按钮的事件。

如果明确定义了这一点,我会尝试制作一个 PR 来实现它。

我不知道为什么,但就我而言(在 Android 上)足以将其添加到我的 MainActivity

        protected override void OnPostCreate(Bundle savedInstanceState)
        {
            var toolBar = FindViewById<global::Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
            SetSupportActionBar(toolBar);

            base.OnPostCreate(savedInstanceState);
        }

有了这个,即使我按下导航栏上的硬件后退按钮和软件后退按钮, OnBackButtonPressed 也会被触发。 但我不明白为什么。

在 iOS 上,我仍然使用自定义页面渲染器自己添加它。

那么,这会在 3.6.0 中修复吗?

我认为它被错误地移到了进行中。

@samhouts所以它现在需要规范? 什么没有具体说明?

@ddobrev我们仍然需要确定暴露人们想要什么的最佳方式。 目前 OnBackButtonPressed 更具体地映射到硬件后退按钮,因此它的功能更多地围绕这一点。 很多人想要的更多的是 OnNavigatingBack 功能。

现在只是将软件后退箭头与该方法联系起来似乎更像是一个黑客然后提供最佳解决方案

例如只是弃用 OnBackButtonPressed 并创建

OnHardwareBackButtonPressed 和 OnNavigatingBack

好吧,无论哪种方式都很好。 去做就对了。 已经够久了。

作为页面功能,这样的事情有意义吗? 如果我们能够观察和取消反向导航(因此 Task\

enum ReverseNavigationSourceType {
    Unspecified,
    HwButton,
    Navbar,
    Gesture
}

class ReverseNavigationEventArgs {
    public ReverseNavigationSourceType SourceType { get; }
    public object Source { get; }
}

class Page {
    public virtual Task<bool> OnNavigatingBack(ReverseNavigationEventArgs args) {
        return Task.FromResult(true);
    }
}

我可以看到的第二个可行选项是将其作为INavigation接口的一部分来实现。

编辑:稍微修改了 API

@pikausp解决方案对我来说是最好的

此外,我认为进一步扩展它并引入类似于“页面状态”的东西会很棒。

页面可以是活动的或非活动的。

class PageActivationEventArgs { }
class PageDeactivationEventArgs {
    public bool IsPermanent { get; }
}
class Page {
    public virtual Task OnActivating(PageActivationEventArgs) {
        return Task.CompletedTask;
    }

    public virtual Task<bool> OnDeactivating(PageDeactivationEventArgs) {
        return Task.FromResult(true);
    }
}

当 Page 导航离开OnDeactivating调用。 IsPermanent值取决于页面是否保留在导航堆栈中(弹出为true,推送为false)。

可能会引入导航完成后调用的OnActivatedOnDeactivated

这为开发人员提供了强大的导航流程。

你怎么看?

你介意在这里报告任何进展吗?

有什么办法可以提高优先级?
多年来我一直有解决方法,有时不再起作用,......
我目前的解决方法也是一个非常糟糕的 hack,有缺点,很想永久删除我的自定义导航页面渲染器并修复过程中的一些问题。

关于拦截软后退按钮的任何更新。 我们在这方面真的很挣扎。 这篇文章中提到的任何解决方案都不适合我们。

这是真正需要的。 对于这种明显的遗漏,必须破解或实现自己的工具栏有点过头了。 请 ...

@samhouts这里有任何更新吗?
听起来这里已经建议了多个高级解决方案,所有这些都将为我们提供我们正在寻找的功能。

也很想拥有这个功能。

每个应防止数据丢失的用例都需要。 我也需要这个,每个解决方法都太笨拙了。

好的,团队,我们现在倾向于这里描述的功能: https :

有异议吗?

@samhouts我快速浏览了链接的问题,因为我还没有使用过 shell,所以这更像是一个问题。 BackButtonBehavior只是一个命令的包装器(带有一些额外的东西),当用户尝试返回时会执行该命令?

基本上,这不是拦截反向导航,而是控制当用户尝试通过任何可用方法(滑动、导航栏按钮、android 按钮等)向后导航时究竟发生了什么。 如果我决定,我可以决定将用户导航到新页面而不是导航回来,对吗?

@samhouts我在 iOS uwp 和 Android 的生产应用程序中有一个有效的拦截。 iOS 和 Android 使用自定义页面渲染器。 当用户通过软件或硬件返回按钮返回时,我可以显示弹出窗口“放弃更改?”。 当用户确认提示时,执行返回导航并弹出页面,否则用户停留在当前页面。 我还没有考虑到刷卡也可以返回,这在我的实现中是缺失的

@samhouts - 我不清楚该提案如何允许拦截后退按钮以添加条件步骤。

提案是这样运作的吗?

  • 如果 {Shell, NaviationPage}.BackButtonCommand 未指定,则后退按钮行为正常,后退导航自动发生。
  • 如果分配了 {Shell, NaviationPage}.BackButtonCommand,则不会自动发生后退导航。 分配的 ICommand 实例可能会显式执行此类操作,具体取决于您是否使用 Shell。

c# async Task MyProcessBackButton(bool usingShell) { bool navigateBack = await DisplayAlert("Cancel?", "Undo changes", "Yes", "No"); var mainPage = usingShell ? (Page)Shell.Current : Application.Current.MainPage; if (mainPage is MasterDetailPage mdPage) mainPage = mdPage.Detail; if (navigateBack) await mainPage.Navigation.PopAsync(); }

这样的事情应该对我有用,但似乎很麻烦。 也许我没有正确看待提案。 看看用例子说明的用例会有所帮助。

PS 像@nschoenberg一样,我也在我的应用程序中拦截了自定义渲染(在 NavigationPage 上,执行类似于上面的 MyProcessBackButton 方法的操作。很高兴该提案不需要 Shell - 这将使我们的旧应用程序更容易采用)。

  • 如果 {Shell, NaviationPage}.BackButtonCommand 未指定,则后退按钮行为正常,后退导航自动发生。

这就是我想象它的工作方式,如果不被覆盖,我们通常需要默认功能。 这与覆盖 android 上的设备后退按钮并返回 true 的行为相同。 以某种方式复制该实现是否有意义?

作为页面功能,这样的事情有意义吗? 如果我们能够观察和取消反向导航(因此 Task)。 此外,能够区分导致请求返回的原因可能很方便。

enum ReverseNavigationSourceType {
    Unspecified,
    HwButton,
    Navbar,
    Gesture
}

class ReverseNavigationEventArgs {
    public ReverseNavigationSourceType SourceType { get; }
    public object Source { get; }
}

class Page {
    public virtual Task<bool> OnNavigatingBack(ReverseNavigationEventArgs args) {
        return Task.FromResult(true);
    }
}

我可以看到的第二个可行选项是将其作为INavigation接口的一部分来实现。

编辑:稍微修改了 API

在问题https://github.com/xamarin/Xamarin.Forms/issues/6971#issuecomment -574823028 中,我不确定 BackButtonCommand 的确切位置,仅在 NavigationPage 上提供? 包含的 NavigationPage 上是否有一个实现,并且推送到该导航堆栈上的所有页面都使用相同的行为? (我不认为这将是一个典型的用例)。 各个页面如何实现自己的覆盖并利用该命令?

我认为上面提供的建议将满足开发人员需要覆盖每页的需求,因为后退导航的调用与一些无关紧要,开发人员通常希望简单地控制后退导航上发生的事情,即在将它们发送到之前提示一些用户对话框另一个页面或简单地保留为默认值。

我不能代表每个人,但我们在项目中有实例,我们实现了一些如果按下软件按钮就会执行的函数,我们还覆盖了调用相同函数的OnBackButtonPressed 。 两种形式的后退导航执行相同的代码。

这些属性都与 NavigationPage 上的任何附加属性相同

https://github.com/xamarin/Xamarin.Forms/blob/master/Xamarin.Forms.Core/NavigationPage.cs#L19

您可以将它们应用到活动页面,然后 NavigationPage 做出反应。 附加属性很好,因为它们是可绑定的,因此您只需在页面上设置它并将其绑定到 VM。

<ContentPage NavigationPage.BackButtonCommand={Bindiing BackCommand}

让命令“禁用”默认行为的优点之一是它启用异步导航。 因为现在按钮只是路由到命令,命令可以做任何它想做的事情,然后它可以使用导航 apis 来完成导航。

使其全部异步很有趣,主要是因为诸如向后滑动或滑动以关闭模式之类的场景,因为这些不是本机“异步”的,所以我们在这里也可以做的是点击这些手势,路由到命令,然后取消手势。

我们还可以将其设置为 Navigation 类上的一个事件,该事件可以一直向上触发分层代理,然后您可以使用 EventToCommand 行为的事件。

我也想知道 NavigatingBack 是否有意义。 如果我们要进行类似的操作,不妨创建一个类似于 shell 的导航事件。

我意识到这有点散漫:-)但只是想回答一些问题并提出一些想法供讨论

您可以将它们应用到活动页面,然后 NavigationPage 做出反应。 附加属性很好,因为它们是可绑定的,因此您只需在页面上设置它并将其绑定到 VM。

<ContentPage NavigationPage.BackButtonCommand={Bindiing BackCommand}

@PureWeen抱歉忘记了可以通过这种方式访问​​页面上的属性,无论如何这样做都是有意义的。

NavigationPage.BackButtonCommand 是否也会使用设备后退按钮,还是仅使用软件后退按钮? 由于还有其他调用返回导航的方法。

目前我认为NavigationPage.BackButtonCommand消失了,我们有一些更通用的东西。 只需要多考虑一下。

与 pop/push 相关的东西可能有意义并匹配现有的 api

不完全是这些,而是​​沿着这些路线的东西

用户请求的弹出命令
用户请求的推送命令

或者可能是 PoppingCommand 和 PushingCommand,然后我们可以使用类似于您提供上下文的参数的内容。

C# enum NavigationSourceType { Unspecified, HwButton, Navbar, Gesture, FromCode }

我也想将其全部绑定,但我还没有完全了解我非常喜欢的想法。

也许导航上的某些内容指示当前导航状态?
因此,如果它是通过命令完成的,您可以询问 Navigation 是正在进行的手势还是其他

这事有进一步更新吗? 我们已经等了一年多了。

这事有进一步更新吗? 我们已经等了一年多了。

放松。 一年不算什么。 4 年前在 iPad 上使用 MasterDetail 的 SplitView 被报告说它不起作用并且被窃听。 此时,Xamarin.Forms 仍在使用 Bugzilla。

@SebastianKruseWago这与其他领域已经存在的预期功能完全不同。 他们还修复了一个允许变通的“错误”。 因此,对于从第一天起就应该包括在内的事情,一年是很多的。

@akemper1 SplitView 也应该从第一天开始工作。 这也是一个错误,因为它只是 iPad MasterDetailRenderer 的问题。 它在 2.4 版左右之前已经工作过,但解决方法很丑。 所以我不认为这是不同的。

你好,有消息了吗?

@scriptBoris可能的解决方法如下这些链接,根据您的项目结构,一种解决方案可能比另一种更适合。

https://forums.xamarin.com/discussion/67854/android-menu-and-back-button-not-working

https://theconfuzedsourcecode.wordpress.com/2017/03/12/lets-override-navigation-bar-back-button-click-in-xamarin-forms/

我已经从单独项目的链接中获得了这两种解决方案。

下午好,很抱歉打扰您,请问有解决此问题的消息吗? О.О

我正在更新问题:)

<ContentPage NavigationPage.HasBackButton="False">

有任何更新吗? 此线程中提出的解决方案是可以接受的,已经有很多年了,人们正在等待这一点。

Xamarin 团队的任何人都可以对此状态发表评论吗? 这对很多人来说确实是一个大问题。

我知道您可以在 shell 中执行此操作,但是对于许多利用 Prism 或 MVVMCross shell 的大型应用程序,并未完全受支持,因此这是我们真正需要的。

谢谢

抱歉@akemper1,但目前没有具体的更新。

我们还没有忘记这个,只是在正式的 API 上有点延迟。 有一些未决的 Shell PR 会影响后退按钮,它们将传播到此处使用的 API

我同意许多人说这对他们来说是一个大问题。

不过,我将尝试一些解决方法。 我只是希望能够阻止用户返回,直到他们“确认”他们将丢失他们所在页面上的更改。

有关于这方面的消息吗? 真的很久了:(

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

rmarinho picture rmarinho  ·  3评论

Papirosnik picture Papirosnik  ·  3评论

MartinWegner picture MartinWegner  ·  3评论

EmilAlipiev picture EmilAlipiev  ·  3评论

Hudhud picture Hudhud  ·  3评论