目标实现:
-提示确认消息“ 您确认要退出吗?”,并带有选项“ 是”和“ 取消”
我一直在寻找实现上述目标的方法。我尝试了以下代码:
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 中写了上述代码,但是该代码似乎对我不起作用,我看不到“ CLOSE”打印出来在调试输出中。
答案 0 :(得分:1)
经过一番挖掘,我发现应用程序关闭确认实际上是一个restricted capability,您必须在应用程序清单中声明。右键点击 Solution Explorer 中的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
,则必须使用延迟,以便系统在检查{{1}之前等待await
完成。 }属性:
Handled
与每次手动终止应用程序并将事件每次设置为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
意味着应用立即“硬销”。