しっぽを追いかけて

ぐるぐるしながら考えています

Unity と猫の話題が中心   掲載内容は個人の私見であり、所属組織の見解ではありません

Windows アプリで 2 画面表示する

エバンジェリストの荒井さんから UX ガイドラインが更新されたとのお知らせがあったので、改めて UX ガイドラインを見直してみたところ、見慣れない機能が・・・!

プロジェクション マネージャーのガイドライン (Windows)

これはなんだ?!ということで動かして試してみました

普通の GridView で画像を表示するアプリの中でクリックしたら次のような処理を実行するようにしてみました

/// <summary>
/// アイテムクリックイベントハンドラ
/// </summary>
/// <param name="sender">イベント発行者</param>
/// <param name="e">イベント引数</param>
public async void OnItemClick(object sender, ItemClickEventArgs e)
{
    if (!ProjectionManager.ProjectionDisplayAvailable)
    {
        return;
    }

    var appView = ApplicationView.GetForCurrentView();

    // クリックしたタイルの画像 Uri
    var imageUri = ((e.ClickedItem as ItemContainerViewModel).Content as PhotoViewModel).ImageUri;

    // 新しいアプリケーション画面を作る
    var view = CoreApplication.CreateNewView();
    await view.Dispatcher.RunAsync(
        CoreDispatcherPriority.Normal,
        async () =>
        {
            var newWindow = Window.Current;
            var newAppView = ApplicationView.GetForCurrentView();

            var grid = new Grid();
            var image = new Image();
            grid.Children.Add(new Image()
            {
                Source = new BitmapImage(new Uri(imageUri)),
            });

            // 新しいアプリケーション画面のウィンドウに画像を埋め込み
            newWindow.Content = grid;

            // 同一アプリのアプリケーション画面として別画面に投影開始
            await ProjectionManager.StartProjectingAsync(newAppView.Id, appView.Id);
        });
}

さっそく実行すると

f:id:matatabi_ux:20140622220024p:plain

おおー!2 つ目の画面が開いて選んだ写真が表示されました Windows アプリでも 1 アプリで複数画面使えるんですね・・・業務アプリとかで応用できそう