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

UWPで共有コントラクト 送信側

$
0
0

共有コントラクトってUWPでも言うんですかね?

Windows 8で追加されて、めでたく?Windows 10で廃止されたチャームにあった共有ですが、UWPではアプリから明示的に共有を表示してやる必要があります。それ以外はWindowsストアアプリの頃と変わっていません。(ストアアプリの頃も明示的に自分で共有のUI呼び出せたけど、特に理由がない限りチャームがあったのでする必要はなかった)

手順としては、DataTranferManagerをGetForCurrentViewで取得して、それのDataRequestedイベントを購読する感じです。このイベントは、共有されるときに呼び出されます。あとは、DataTranferManager.ShowShareUI()で共有用のUIを表示してやればOKです。コードだと以下のようになります。 (画面にボタンを1つだけおいてる前提)

using Windows.ApplicationModel.DataTransfer;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;

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

        protectedoverridevoid OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            // データの要求があったときのイベントを購読
            var dtm = DataTransferManager.GetForCurrentView();
            dtm.DataRequested += this.Dtm_DataRequested;
        }

        protectedoverridevoid OnNavigatedFrom(NavigationEventArgs e)
        {
            base.OnNavigatedFrom(e);
            // イベントの購読解除
            var dtm = DataTransferManager.GetForCurrentView();
            dtm.DataRequested -= this.Dtm_DataRequested;
        }

        privatevoid Button_Click(object sender, RoutedEventArgs e)
        {
            // 共有のためのUIを表示
            DataTransferManager.ShowShareUI();
        }

        privatevoid Dtm_DataRequested(DataTransferManager sender, DataRequestedEventArgs args)
        {
            // 共有するデータを設定する
            args.Request.Data.Properties.Title = "Hello";
            args.Request.Data.Properties.Description = "練習";
            args.Request.Data.SetText("Hello world");

            // 途中に非同期処理とかが入るときは以下のようにDeferralを使う// var d = args.Request.GetDeferral();// ここで非同期処理でデータをとってきたりする// d.Complete();
        }
    }
}

実行してボタンを押すと、以下のように共有のUIが表示されます。

f:id:okazuki:20160315125211p:plain

Aristeaに共有した場合。プログラムでセットしたHello worldが渡されてることがわかります。

f:id:okazuki:20160315125244p:plain


Viewing all articles
Browse latest Browse all 1387

Trending Articles



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