(本記事はWindows8Consumer PreviewとVisualStudio11β環境で動作を確認しています)
vol.10でCharmの検索機能を使ってアプリに検索された入力を受け取る方法を紹介しました。
今回はCharmの検索検索ボタンの下にある「共有ボタン」の仕組みを説明してみようと思います。
ファイルやテキストなどを共有するためには最低2つのアプリが登場する必要があります。
データを渡すアプリと受け取るアプリです。
まずはデータを渡すアプリの動きを見ていきましょう。
共有コントラクトを利用するにはDataTransferManagerクラスを利用します。
サンプルコードは以下、アプリがロードされたらいきなり共有コントラクトを呼び出しています(あくまでサンプルということで・・・)。
public BlankPage() { this.InitializeComponent(); this.Loaded += BlankPage_Loaded; } void BlankPage_Loaded(object sender, RoutedEventArgs e) { DataTransferManager manager; manager = DataTransferManager.GetForCurrentView(); manager.DataRequested += new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>(this.DataRequested); DataTransferManager.ShowShareUI(); } private void DataRequested(DataTransferManager sender, DataRequestedEventArgs args) { args.Request.Data.Properties.Title = "眠るシーラカンスと水底のプログラマー"; args.Request.Data.Properties.Description = "MetroStyleApp入門 vol11.共有機能を利用する"; args.Request.Data.SetText("共有コントラクトの機能を紹介します"); }
ShowShareUIというなんだか文字通りなメソッドで共有コントラクトの画面を呼び出します。
渡すデータの定義はDataRequested イベントハンドラー内で行います。
実行すると上記画像のように右側に共有対象となるアプリが表示されます。
私の環境だと初期状態ではメールアプリしか候補として表示されません。
続いてデータを受け取る側のアプリを用意しましょう。
データを受け取る側のアプリは前回検索に対応したアプリの作り方を紹介したときに行ったように共有コントラクトに対応することを「宣言」する必要があります。
宣言はPackage.appxmanifestに追加します。
サポートされる宣言で「共有ターゲット」を追加します。
データ形式のTextに対応する設定にします。
これでアプリを起動すれば共有コントラクトの対応アプリと認識され、候補に出るのですが、
実際に軌道された後に何も実行するコードが書かれていないので何もしません。
共有コントラクトにアプリ側を対応させましょう。
項目の追記より「共有ターゲット コントラクタ」を追加します。
まずはこのテンプレートをそのまま使いましょう。
App.xaml.csに共有コントラクトの機能から起動された場合に上記のテンプレートを使うように記述します。
protected override void OnShareTargetActivated(Windows.ApplicationModel.Activation.ShareTargetActivatedEventArgs args) { var target = new ShareApp.ShareTargetPage1(); target.Activate(args); }
全体を通して実行すると以下のような流れになります。
データ受け取り側のアプリは共有ターゲットコントラクトのコントロールを呼び出された状態で起動。
画面を分割された状態で2つのアプリが表示されている。
渡したデータが受取れていることが確認できます。
共有コントラクトについてはまたどこかで掘り下げてかければなと思います。
Please give us your valuable comment