atelier:mitsuba

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

その13:MessageDialogを表示する

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

MetroStyleAppsにはMessageBoxはありません。
かわりにMessageDialogが存在します。

見た目はこんなかんじ。

MessageDialog.Show()とか出来たらいいんですが、それではできなくてこんなふうにかきます。

<UserControl x:Class="Application19.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="Green">
        <Button Content="MessageDialogButton" Click="Button_Click" HorizontalAlignment="Center"></Button>
    </Grid>
   
</UserControl>
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;

using Windows.UI.Popups;

namespace Application19
{
    partial class MainPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            var md = new MessageDialog("Hello Metro");
            await md.ShowAsync();
        }
    }
}

C#のコードからもわかるように、MessageDialogを使う場合は、private asyncとなります。
また、MessageDialog.ShowAsync()するまえにawaitを記述します。
これは、MessageDialogを表示する際に、後ろに表示してある画面を一旦ストップさせている(というかMessageDialogが割り込んで処理している)から、非同期の処理になるものだと思われます。

あとはusingに
using Windows.UI.Popups;
が追加されているのもポイントね!