WP8.1StoreApp(WP8.1RT)---MessageBox与MessageDialog

在WP7和WP8中,MessageBox是跟WinForm中一样常用的对话框,但是有一个显著的缺点,就是WP7/8中默认的MessageBox是阻塞线程的。也许是由于这个原因,WP8.1/Win8中采用了异步的MessageDialog对话框, 其扩展性和可定制性更强。但是在很多情况下需要挂起线程等待用户响应或者是单纯怀念MessageBox的简单方便的使用方式。于是我封装了一下WP8.1中的MessageDialog,使其可以像MessageBox一样简单的使用。

 

public sealed class MessageBox

{

    // 摘要: 

    //     显示包含指定文本和“确定”按钮的消息框。

    //

    // 参数: 

    //   messageBoxText:

    //     要显示的消息。

    //

    // 异常: 

    //   System.ArgumentNullException:

    //     messageBoxText 为 null。

    public async static Task<MessageBoxResult> Show(string messageBoxText)

    {

        if (messageBoxText == null)

            throw new ArgumentNullException("messageBoxText is null");

 

        var tcs = new TaskCompletionSource<MessageBoxResult>();

 

        var dialog = new MessageDialog(messageBoxText);

 

        dialog.Commands.Add(new UICommand("确定", command =>

        {

            tcs.SetResult((MessageBoxResult)command.Id);

        }, MessageBoxResult.OK));

 

        dialog.DefaultCommandIndex = 0;

        dialog.CancelCommandIndex = 0;

 

        await dialog.ShowAsync();

 

        return await tcs.Task;

    }

 

    //

    // 摘要: 

    //     显示包含指定文本、标题栏标题和响应按钮的消息框。

    //

    // 参数: 

    //   messageBoxText:

    //     要显示的消息。

    //

    //   caption:

    //     消息框的标题。

    //

    //   button:

    //     一个值,用于指示要显示哪个按钮或哪些按钮。

    //

    // 返回结果: 

    //     一个值,用于指示用户对消息的响应。

    //

    // 异常: 

    //   System.ArgumentNullException:

    //     messageBoxText 为 null。- 或 -caption 为 null。

    //

    //   System.ArgumentException:

    //     button 不是有效的 System.Windows.MessageBoxButton 值。

    public async static Task<MessageBoxResult> Show(string messageBoxText, string caption, MessageBoxButton button)

    {

        if (messageBoxText == null)

            throw new ArgumentNullException("messageBoxText is null");

        if (caption == null)

            throw new ArgumentNullException("caption is null");

        if (button != MessageBoxButton.OK && button != MessageBoxButton.OKCancel)

            throw new ArgumentException("button is null");

 

        var tcs = new TaskCompletionSource<MessageBoxResult>();

 

        var dialog = new MessageDialog(messageBoxText,caption);

 

        dialog.Commands.Add(new UICommand("确定", command =>

        {

            tcs.SetResult((MessageBoxResult)command.Id);

        }, MessageBoxResult.OK));

 

        if (button==MessageBoxButton.OKCancel)

        {

            dialog.Commands.Add(new UICommand("取消", command =>

            {

                tcs.SetResult((MessageBoxResult)command.Id);

            }, MessageBoxResult.Cancel));

        }

 

        dialog.DefaultCommandIndex = 0;

        if(button==MessageBoxButton.OKCancel)

            dialog.CancelCommandIndex = 1;

        else

            dialog.CancelCommandIndex = 0;

 

        await dialog.ShowAsync();

 

        return await tcs.Task;

    }

}

 

// 摘要: 

//     指定显示消息框时要包含的按钮。

public enum MessageBoxButton

{

    // 摘要: 

    //     仅显示“确定”按钮。

    OK = 0,

    //

    // 摘要: 

    //     同时显示“确定”和“取消”按钮。

    OKCancel = 1,

}

 

// 摘要: 

//     表示对消息框的用户响应。

public enum MessageBoxResult

{

    // 摘要: 

    //     当前未使用此值。

    None = 0,

    //

    // 摘要: 

    //     用户单击了“确定”按钮。

    OK = 1,

    //

    // 摘要: 

    //     用户单击了“取消”按钮或按下了 ESC。

    Cancel = 2,

    //

    // 摘要: 

    //     当前未使用此值。

    Yes = 6,

    //

    // 摘要: 

    //     当前未使用此值。

    No = 7,

}

调用方式:

await MessageBox.Show("demo");



await MessageBox.Show("demo", "liubaicai.com", MessageBoxButton.OKCancel);

 

MessageBoxResult result = await MessageBox.Show("demo", "liubaicai.com", MessageBoxButton.OKCancel);

收工
http://www.liubaicai.net/?p=298

 

 

你可能感兴趣的:(message)