Uwp 如何在退出时创建确认弹出窗口?

Uwp 如何在退出时创建确认弹出窗口?,uwp,Uwp,当用户试图关闭应用程序时,如何显示确认弹出窗口 以及如何自定义以在屏幕上显示类似的对话框 我最近写过这方面的文章 您需要订阅CloseRequested事件: SystemNavigationManagerPreview.GetForCurrentView().CloseRequested += App_CloseRequested; 然后使用延迟来确保系统等待用户确认: private async void App_CloseRequested(object sender, SystemNa

当用户试图关闭应用程序时,如何显示确认弹出窗口

以及如何自定义以在屏幕上显示类似的对话框

我最近写过这方面的文章

您需要订阅
CloseRequested
事件:

SystemNavigationManagerPreview.GetForCurrentView().CloseRequested += App_CloseRequested;
然后使用延迟来确保系统等待用户确认:

private async void App_CloseRequested(object sender, SystemNavigationCloseRequestedPreviewEventArgs e)
{
    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);
    if (await dialog.ShowAsync() == cancelCommand)
    {
        //cancel close by handling the event
        e.Handled = true;
    }
    deferral.Complete();
}
最后,您需要在
包.appxmanifest
中声明
appCloseConfirm
功能,因为它是受限制的功能。在XML编辑器中打开
Package.appxmanifest
,并将
rescap
命名空间添加到
Package
元素:

<Package ... xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap mp rescap">
<rescap:Capability Name="confirmAppClose" />

然后在
元素中添加该功能:

<Package ... xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap mp rescap">
<rescap:Capability Name="confirmAppClose" />

至于定制,你可以用任何你想要的方式显示UI,比如使用完全可定制的
ContentDialog
(感谢@Johnny Westlake指出我的错误:-),或者
弹出窗口
,或者在你的应用UI上方使用一些定制UI。

我最近写过这方面的文章

您需要订阅
CloseRequested
事件:

SystemNavigationManagerPreview.GetForCurrentView().CloseRequested += App_CloseRequested;
然后使用延迟来确保系统等待用户确认:

private async void App_CloseRequested(object sender, SystemNavigationCloseRequestedPreviewEventArgs e)
{
    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);
    if (await dialog.ShowAsync() == cancelCommand)
    {
        //cancel close by handling the event
        e.Handled = true;
    }
    deferral.Complete();
}
最后,您需要在
包.appxmanifest
中声明
appCloseConfirm
功能,因为它是受限制的功能。在XML编辑器中打开
Package.appxmanifest
,并将
rescap
命名空间添加到
Package
元素:

<Package ... xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap mp rescap">
<rescap:Capability Name="confirmAppClose" />

然后在
元素中添加该功能:

<Package ... xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap mp rescap">
<rescap:Capability Name="confirmAppClose" />


至于定制,您可以用任何方式显示UI,比如使用完全可定制的
ContentDialog
(感谢@Johnny Westlake指出我的错误:-)),或者
弹出窗口
,或者在您的应用程序UI上方使用一些定制UI。

ContentDialog完全可以主题化,如果您愿意,您可以覆盖它的默认XAML,并在保持其行为和流的同时使用它做任何您想做的事情。哦,我还没有意识到它是可模板化的!酷:-)。我会更新答案(我看到了你的指南)并制作了弹出窗口,它工作正常,但我不知道如何制作自定义样式4)我会使用自定义内容对话框等待你的更新指南)。无论如何,谢谢。如果您愿意,ContentDialog是完全可主题化的,您可以覆盖它的默认XAML,并在保持其行为和流的同时对其执行任何操作。哦,我还没有意识到它是可模板化的!酷:-)。我会更新答案(我看到了你的指南)并制作了弹出窗口,它工作正常,但我不知道如何制作自定义样式4)我会使用自定义内容对话框等待你的更新指南)。无论如何,谢谢你。