实现目标:
- 提示确认消息“您确认退出吗?”,带有选项“是”和“取消”
我一直在寻找一种方法来实现上面写的目标。我尝试了以下代码:
Windows.UI.Core.Preview.SystemNavigationManagerPreview.GetForCurrentView().CloseRequested += async (sender, args) =>
{
args.Handled = true;
var dialog = new MessageDialog("Are you confirm to exit?", "Exit");
System.Diagnostics.Debug.WriteLine("CLOSE");
};
上面的代码我写在 MainPage.xaml.cs ,但这段代码似乎对我不起作用,我没有在调试输出中看到“关闭”打印出来。
最佳答案
经过一番挖掘,我发现应用关闭确认实际上是 restricted capability您必须在应用程序 list 中声明。右击Package.appxmanifest
文件在 解决方案资源管理器 并选择查看代码 .
在打开的 XML 文件中,首先在根目录中添加以下命名空间 Package
元素:
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
现在找到
Capabilities
添加 confirmAppClose
的部分能力:<Capabilities>
<Capability Name="internetClient" />
<rescap:Capability Name="confirmAppClose" />
</Capabilities>
另外,请注意,如果您想显示
MessageDialog
,您将不得不使用延迟,以便系统等待 await
在检查 Handled
之前完成属性(property):var deferral = e.GetDeferral();
var dialog = new MessageDialog("Are you sure you want to exit?", "Exit");
var confirmCommand = new UICommand("Yes");
var cancelCommand = new UICommand("No");
dialog.Commands.Add( confirmCommand);
dialog.Commands.Add(cancelCommand);
dialog.CancelCommandIndex = 1;
dialog.DefaultCommandIndex = 1;
if (await dialog.ShowAsync() == cancelCommand)
{
//cancel close by handling the event
e.Handled = true;
}
deferral.Complete();
与仅手动终止应用程序并将事件设置为
Handled
相比,此方法的优势每次都是在这种情况下,应用程序首先经历暂停生命周期事件,这允许您保存任何未保存的更改,而 Application.Terminate()
例如,这意味着应用程序会立即“硬杀”。
关于xamarin.forms - 如何在退出 UWP Xamarin 表单时提示确认消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52050237/