如何从退出页面禁用用户?
这里的等待不起作用。它只是返回到上一页,然后显示消息
protected async override void OnDisappearing()
{
var answer = await DisplayAlert("Changes un-saved",
"You must tap on 'save' button", "Exit", "Stay on this page");
if (!answer || String.Compare(answer.ToString(), "Exit") == 0)
base.OnDisappearing();
else if(string.Compare(answer.ToString(), "Stay on this page") == 0)
//here i want to stay on same page
}
我试过了,但我不想页面加载
var route = $"//{ nameof(EditPage)}";
await Shell.Current.GoToAsync(route);
我也试过这个,但只有当用户在手机上点击后退按钮时,onbackbuttonpress才有效。应用中的非后退按钮
protected override bool OnBackButtonPressed()
{
bool myResult = PromptForExit().Result;
if (myResult)
return true; // dont go back
return false;
}
private async Task<bool> PromptForExit()
{
var answer = await DisplayAlert("Changes un-saved",
"You must tap on 'save' button",
"Exit",
"Stay on this page");
if (string.Compare(answer.ToString(), "Stay on this page") == 0)
return true;
else
return false;
}
在要限制使用的页面中设置附加属性Shell.PresentationMode
,使其保持不变,这将显示页面为模式页面(导航栏将被隐藏..(,同时像您一样覆盖后退按钮,但如果需要,请确保通过该页面上的按钮(例如调用Shell.GotoAsync("..")
的按钮(以某种方式允许导航出该页面
<ContentPage ...
Shell.PresentationMode="ModalAnimated"
您也可以将其值设置为Modal
或ModalNotAnimated
。
文档外壳演示模式
您可以尝试类似的
protected override bool OnBackButtonPressed()
{
Device.BeginInvokeOnMainThread(async() => {
bool myResult = await PromptForExit();
if (myResult) await this.Navigation.PopAsync();
});
return true;
}
让我知道它是否适合你。
这是一个棘手的问题,因为苹果决定声明;背面";操作不能被应用程序中断。你可以中断android硬件的后退按钮,你还可以中断NavigationPage
软件的后退按钮。但你不能以任何方式中断MasterDetailPage
软件的后退。
过去,如果你想阻止用户返回,你必须使用这样的东西:
var loginPage = new LoginPage();
var navigationPage = new NavigationPage(loginPage);
NavigationPage.SetHasNavigationBar(loginPage, true);
// Disable the back button
NavigationPage.SetHasBackButton(loginPage, false);
await Navigation.PushModalAsync(navigationPage);
推荐的与";背面";操作是使用Navigation.PushModalAsync()
的模式页面。疼痛减轻了很多。
你已经试过使用新的外壳了吗。微软去年推出正是出于这个原因。
这似乎是对壳牌的一项有趣的调查:https://theconfuzedsourcecode.wordpress.com/2020/06/09/overriding-back-button-in-xamarin-forms-shell/