覆盖 Windows 10 通用应用程序 UWP 上的关闭框

7
我正在尝试防止应用程序被单击应用窗口的关闭框关闭。 例如,使用未保存更改的文本编辑器,按下关闭框时,我首先会显示“退出前要保存更改吗?”。
如何检测应用程序想要关闭并阻止这种情况发生?
我正在使用C++,这需要用于Windows 10通用应用程序UWP。 我已经知道如何在Win32中完成此操作。

1
我认为你无法做到这一点,你只能对正在调用的应用程序挂起事件做出反应。 - Tamás Deme
2
这是可能的,因为Microsoft Edge浏览器是一个UWP应用程序,并且在某些情况下支持此行为。例如,在Facebook聊天中,输入一些消息而不按回车键(发送),然后尝试关闭浏览器。这意味着它是可能的,我只是不知道如何做。有任何帮助吗? - Esenthel
Edge是一款第一方应用程序 - 微软可以使用其他人无法使用的API。https://msdn.microsoft.com/en-us/library/windows/apps/mt243287.aspx清楚地说明没有应用程序关闭事件。 - Tamás Deme
1个回答

7
评论是正确的。目前,普通商店应用程序无法做到这一点。但是,使用创作者更新(和相应的SDK),我们已经包含了一个预览API,您现在可以检查此功能:
Windows.UI.Core.Preview.SystemNavigationManagerPreview类提供了一个CloseRequested事件,应用程序可以将其标记为已处理。为了使事件起作用,应用程序需要声明受限的“confirmAppClose”功能,请参阅https://learn.microsoft.com/en-us/windows/uwp/packaging/app-capability-declarations
请告诉我们您的反馈意见。
谢谢,
Stefan Wick - Windows开发平台

谢谢提供这个信息,真是太令人兴奋了。我会等API最终确定后再进行操作。 - Esenthel
在16299 SDK中未找到“ConfirmAppClose”功能。 - Vincent
@Snekithan:是的,正如答案中提到的那样,自创作者更新以来就已经可用了。这是MSDN链接:https://learn.microsoft.com/en-us/uwp/api/windows.ui.core.preview.systemnavigationmanagerpreview.closerequested - Stefan Wick MSFT
有没有一种方法可以通过页面视图按钮触发SystemNavigationManagerPreview.GetForCurrentView().CloseRequested()事件,以引起与单击右上角标准X相同的后续操作?我尝试了"Window.Current.Close();",但它会生成一个"System.Runtime.InteropServices.COMException: '在意料之外的时间调用了一个方法。不允许关闭主窗口。'"的错误信息。 - myusrn
CloseRequested 仅用于用户发起的关闭手势(例如单击 X 按钮)。如果您想以编程方式关闭应用程序,则可以调用 Application.Shutdown()。如果您想在进行该调用之前要求用户确认,则可以这样做。 - Stefan Wick MSFT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接