Metro Styleアプリケーションで共有チャームに対応する - 共有アプリソース側 - C#

Metro Stykeアプリケーションで共有機能を使用して情報を共有するプログラムを作成します。
(共有コントラクトの実装をします。)

UI

下図のUIを準備します。ボタンを2つ配置します。

コード

以下のコードを記述します。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.ApplicationModel.DataTransfer;

// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238

namespace SimpleShareApp
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class BlankPage : Page
    {
        public BlankPage()
        {
            this.InitializeComponent();
        }

        /// <summary>
        /// Invoked when this page is about to be displayed in a Frame.
        /// </summary>
        /// <param name="e">Event data that describes how this page was reached.  The Parameter
        /// property is typically used to configure the page.</param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
          DataTransferManager datatransferManager;
          datatransferManager = DataTransferManager.GetForCurrentView();
          datatransferManager.DataRequested += 
            new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>(this.DataRequested);
        }

        private void Button_Click_2(object sender, RoutedEventArgs e)
        {
          DataTransferManager.ShowShareUI();
        }

        async void DataRequested(DataTransferManager sender, DataRequestedEventArgs e)
        {
          e.Request.Data.Properties.Title = "データのタイトル";
          e.Request.Data.Properties.Description = "データの説明";
          e.Request.Data.SetText("テキスト");
        }
    }
}

解説

Button_Click_1
DataTransferManager datatransferManager;
datatransferManager = DataTransferManager.GetForCurrentView();
DataTransferManagerのGetForCurrentView()メソッドを呼び出しDataTransferManager のオブジェクトを取得します。

datatransferManager.DataRequested += 
  new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>(this.DataRequested);
DataRequestedイベントハンドラに、イベントハンドラを追加します。イベントハンドラのコンストラクタの引数に情報を送るメソッドを与えます。

Button_Click_2
DataTransferManager.ShowShareUI();
ShowShareUIメソッドの呼び出しにより共有メニューを表示します。

実行結果

プロジェクトを実行します。下図の画面が表示されます。


マウスポインタを右側に移動させチャームを表示します。チャームの[共有]を選択します。


右側に共有メニューが表示されますが、この状態では"SimpleShareAppは共有できません"のメッセージが表示され共有できません。


上の"Button"(Button_Click_1のイベントハンドラのボタン)をクリックします。クリック後、チャームの[共有]を選択すると共有できるアプリの一覧が表示されます。メールでの共有が可能ですので[メール]をクリックします。


右側にメールのスナップウィンドウが表示されます。アプリ側で設定したタイトルやテキストデータがメールアプリに転送されていることが確認できます。


下の"Button"をクリックするとチャームの[共有]を押さずにアプリから共有メニューを表示できます。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-01-07
作成日: 2012-05-22
iPentec all rights reserverd.