Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

UWP でアプリを閉じるときに確認画面を出す方法

$
0
0

これずっと出来ないと思ってたのですが de:code 用に色々見てたら出来るっちゃぁ出来るようになってるのを見つけました。 下記の権限のサイトをみてみると confirmAppCloseっていうのがある!?

docs.microsoft.com

試してみよう

confirmAppCloseの機能を Package.appxmanifest に追加します。

<!--この名前空間を追加してxmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"IgnorableNamespaces に以下のように rescap も追加IgnorableNamespaces="uap mp rescap"--><Capabilities><Capability Name="internetClient" /><!-- これを追加 --><rescap:Capability Name="confirmAppClose" /></Capabilities>

そして、SystemNavigationManagerPreview クラスを使って頑張る感じですね。

using System;
using Windows.UI.Core.Preview;
using Windows.UI.Popups;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace ConfirmCloseApp
{
    publicsealedpartialclass MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        privatevoid Page_Loaded(object sender, RoutedEventArgs e)
        {
            SystemNavigationManagerPreview.GetForCurrentView().CloseRequested += MainPage_CloseRequested;
        }

        private async void MainPage_CloseRequested(object sender, SystemNavigationCloseRequestedPreviewEventArgs e)
        {
            e.Handled = true;
            var d = new MessageDialog("閉じてもよろしいですか?");
            var okCommand = new UICommand("OK");
            d.Commands.Add(okCommand);
            var cancelCommand = new UICommand("Cancel");
            d.Commands.Add(cancelCommand);
            var r = await d.ShowAsync();
            if (r == okCommand)
            {
                Application.Current.Exit();
            }
        }
    }
}

こうすることで閉じる前に確認を挟むことが出来ます。ただ、このイベントは必ず発生するものではなくタブレットモードで上からしたにスワイプしたりしたときには発生しないとかいくつか発生しないケースがあるみたいですね

docs.microsoft.com

なので、この機能を使うにしてもサスペンドのタイミングでユーザーの作業中の未保存のデータがある場合には保存してあげて、そして再度アプリが立ち上げられたタイミングで復元してあげるのが良さそうです。


Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>