atelier:mitsuba

i love UI/UX, Blend, XAML, Behavior, P5, oF, Web, Tangible Bits and Physical computing. なにかあればお気軽にご連絡ください。atelier@c-mitsuba.com

その17:Shareを使ってTweet@ramaからつぶやく

Windows 8 Developer Previewなので正式版とは異なる場合があります。
また、Windows Updateが走るときもあるため、エントリ執筆現在の情報をもとにかいています。

MetroStyleAppsではShare機能を使えば、アプリ間でデータのやり取りを行うことができます。
こんなかんじ。
自作アプリのTextBoxに書いたテキストをShareしてー

Tweet@ramaのTextBoxへ!

しかもとっても簡単です。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Windows.Foundation;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Data;

//Shareに使います。
using Windows.ApplicationModel.DataTransfer;

namespace Application23
{
    partial class MainPage
    {
        public MainPage()
        {
            InitializeComponent();
//インスタンス化
            DataTransferManager datatransferManager;
            datatransferManager = DataTransferManager.GetForCurrentView();

//ShareするデータをShareパネルが取得するためのイベントを登録
            datatransferManager.DataRequested += new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>(this.DataRequested);
        }

        private void DataRequested(DataTransferManager sender, DataRequestedEventArgs args)
        {
//引数argsのプロパティにShareするデータを入れてく。
            args.Request.Data.Properties.Title = "Shareするデータのタイトル";
            args.Request.Data.Properties.Description = "副題";
            args.Request.Data.SetText(tb.Text);
        }

        private void Button_Tapped(object sender, Windows.UI.Xaml.Input.TappedEventArgs e)
        {
//Shareパネルはコントロールからトグルのように表示非表示できるよ
            DataTransferManager.ShowShareUI();
        }
    }
}
<UserControl x:Class="Application23.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="768" d:DesignWidth="1366">
    
    <Grid x:Name="LayoutRoot" Background="#FF0C0C0C">
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
            <StackPanel Orientation="Vertical" Width="300">
                <TextBlock Text=" Text Share" Height="20" FontSize="18"></TextBlock>
                <TextBox x:Name="tb" Height="80" FontSize="18"></TextBox>
            </StackPanel>
            <Button Width="200" Height="100" Tapped="Button_Tapped" Content="Show Share" FontSize="24"></Button>
        </StackPanel>
    </Grid>
    
</UserControl>

この挙動からわかるように、Shareされた値の処理はShareされた先のアプリに依存します。
Tweet@ramaではargs.Request.Data.SetTextがTweetの本文でした。

他にもShare出来るデータは、画像だったりリンクだったりといろいろあります。

どの項目がどのように使われているかを調査して、項目によってより正しい値を入れるようにしないとダメですね。