Windowsストア アプリ開発 Tips集009 ~共有チャームで文字列を共有する~

マイクロソフトの田中達彦です。
本連載では、C#/XAML でWindowsストアアプリを開発するときにヒントを紹介します。

[他のアプリと文字列を共有する]
Windowsストアアプリは、共有コントラクトと呼ばれるさまざまなデータを他のアプリと共有する仕組みを使うことができます。
ユーザーがチャームの共有を使うことで、共有コントラクトの機能が呼ばれます。
共有コントラクトには、共有ソースと呼ばれるデータを提供する側と、共有ターゲットと呼ばれるデータを受け取る側があります。
ここでは、共有ソースとして文字列を共有する方法を紹介します。

まず、共有コントラクトの機能が入っている名前空間を、MainPage.xaml.csの最初のusing節を記述している箇所に、以下のように追加します。

using Windows.ApplicationModel.DataTransfer;

そして、DataTransferManagerのグローバル フィールドを定義します。

DataTransferManager dataTransferManager;

コンストラクタでは、以下の黄色くマーカーしたところのように実装します。
現在のウィンドウに関連付けられているDataTransferManagerオブジェクトをグローバル フィールドに代入し、DataRequestedイベントに対応したイベントハンドラーを定義しています。
DataRequestedイベントは、ユーザーがチャームの共有を選択したときに発生するイベントです。

public MainPage()
{
    this.InitializeComponent();

    try
    {
        dataTransferManager = DataTransferManager.GetForCurrentView();
        dataTransferManager.DataRequested +=
            new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>(this.DataRequested);
    }
    catch
    {
    }
}

以下のようにDataRequestedイベントハンドラーを作成し、その中では共有する情報をパッケージ化します。

void DataRequested(DataTransferManager sender, DataRequestedEventArgs args)
{
    DataRequest request = args.Request;
    DataRequestDeferral deferral = args.Request.GetDeferral();

    request.Data.Properties.Title = "この漢字 読めるかな vol.14";
    request.Data.SetText(Message[CurrentScene]);

    deferral.Complete();
}

ここではデータのTitleプロパティに「この漢字読めるかな vol.14」という文字列を入れ、Message[CurrentScene]に入っている文字列を共有する情報として共有ターゲットのアプリに渡します。
共有ターゲットが標準のメールアプリのときは、Titleプロパティに入れた情報がメールのタイトルになります。

以下は、「この漢字読めるかな? vol.14」というアプリを使って、共有したときの例です。

[関連記事]
コンテンツの共有と受信
https://msdn.microsoft.com/ja-jp/library/windows/apps/hh758314.aspx

[前後の記事]
008 ~特定のWebサイトを表示させる~
010 ~プロジェクト内のテキストファイルを使用する~

[Tips集まとめページ]
https://blogs.msdn.com/b/ttanaka/archive/2013/03/05/windows-tips.aspx

マイクロソフト
田中達彦