桌面上的UWP由顶部X按钮关闭 - 没有事件

tom*_*mab 17 c# desktop-application uwp

在桌面上运行的UWP应用程序可以从顶部X按钮关闭,但它没有任何事件.众所周知,在手机和平​​板电脑上,应用程序应该依赖于Suspending事件,无论它是如何被触发的,然后应用程序应该依赖它ApplicationExecutionState.

然而,这是一个(可能)常见的场景:在手机上Suspending事件就足够了,如果正在进行Voip呼叫,它将在应用程序暂停后由操作系统操作.在桌面上,用户希望关闭按钮完全关闭应用程序.因此,如果正在进行呼叫,则应该挂起并且应该释放某些资源.

当(并且仅当)UWP应用程序在桌面上运行时,如何知道用户何时单击"关闭"按钮?

Mic*_*SFT 12

限制能力 confirmAppClose是在Windows 10 1703版(版本10.0.15063),以提供应用程序拦截窗口关闭的能力增加.

清单命名空间:

xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
Run Code Online (Sandbox Code Playgroud)

表现:

<Capabilities> 
  <Capability Name="internetClient" /> 
  <rescap:Capability Name="confirmAppClose"/> 
</Capabilities> 
Run Code Online (Sandbox Code Playgroud)

提交到商店时需要额外的批准.但随后将CloseRequestedSystemNavigationManagerPreview实例上触发事件.

码:

    public MainPage()
    {
        this.InitializeComponent();
        SystemNavigationManagerPreview.GetForCurrentView().CloseRequested += this.OnCloseRequest;
    }

    private void OnCloseRequest(object sender, SystemNavigationCloseRequestedPreviewEventArgs e)
    {
        if (!saved) { e.Handled = true; SomePromptFunction(); }
    }
Run Code Online (Sandbox Code Playgroud)

你可以在这里做一些延迟工作(保存或提示),或者你可以设置Handled为true以阻止窗口关闭(用户取消提示).