要自己处理导航,请设置Cancel=true(正如您已经做的那样),然后打开对话框以获取用户输入。一旦知道用户的选择,如果用户决定允许进行导航,请使用导航API(例如Frame.GoBack)执行所需的导航(基于例如NavigationMode)。
以下是一些基本示例代码:
private bool isNavigationConfirmed = false;
protected async override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
base.OnNavigatingFrom(e);
if (isNavigationConfirmed)
{
isNavigationConfirmed = false;
return;
}
e.Cancel = true;
var noCommand = new UICommand("No", cmd => { });
var yesCommand = new UICommand("Yes", cmd =>
{
if (e.NavigationMode == NavigationMode.Back)
{
Frame.GoBack();
}
else
{
isNavigationConfirmed = true;
Frame.Navigate(e.SourcePageType);
}
});
var dialog = new MessageDialog("Do you want to allow navigation?");
dialog.Options = MessageDialogOptions.None;
dialog.Commands.Add(yesCommand);
dialog.Commands.Add(noCommand);
await dialog.ShowAsync();
}