如何在Windows Store应用中显示消息?

27
如何在使用C#编写的Windows 8应用程序中显示消息框,就像在Windows Phone 7中调用MessageBox.Show()一样?
6个回答

48
   MessageDialog msgDialog = new MessageDialog("Your message", "Your title");

   //OK Button
   UICommand okBtn = new UICommand("OK");
   okBtn.Invoked = OkBtnClick;
   msgDialog.Commands.Add(okBtn);

   //Cancel Button
   UICommand cancelBtn = new UICommand("Cancel");
   cancelBtn.Invoked = CancelBtnClick;
   msgDialog.Commands.Add(cancelBtn);

   //Show message
   msgDialog.ShowAsync();

还有你的回拨

private void CancelBtnClick(IUICommand command)
{
}

private void OkBtnClick(IUICommand command)
{
}


P.S. 你可以跟随这个教程了解更多。


难道没有更简单的方法吗? - Saw
2
只需在其上创建一个包装器,使其变得更简单。 - Inder Kumar Rathore

27

MessageDialog类包含在哪个命名空间中? - user1547566
@user1547566 我在答案中链接了这个类。 - JP Alioto

12

我的简单方法,用于确认类型的消息框:

  var dlg = new MessageDialog("Are you sure?");
  dlg.Commands.Add(new UICommand("Yes", null, "YES"));
  dlg.Commands.Add(new UICommand("No", null, "NO"));
  var op = await dlg.ShowAsync();
  if ((string)op.Id == "YES")
  {
    //Do something
  }

8

如果要更简单地显示消息文本和“确定”按钮,可以使用Windows.UI.Popups命名空间。创建一个名为messagebox()的方法。

using Windows.UI.Popups;
protected async void messageBox(string msg)
{
      var msgDlg = new Windows.UI.Popups.MessageDialog(msg);
      msgDlg.DefaultCommandIndex = 1;
      await msgDlg.ShowAsync();
}

然后在您的代码中调用此方法,如下所示:

messageBox("Unexpected error held");

1
你几乎永远不应该使用async void方法。 - svick
@svick:这是什么原因? - Disconnect3d
2
@DominikC 因为没有办法找出何时完成,这也使得错误处理几乎不可能。有关详细信息,请参阅此文章 - svick

2

额外的提示:

在现代Windows应用程序中,如果你的应用程序没有进行Window.Current.Active()调用,那么MessageDialog将不会在其之前显示,而这个调用通常发生在应用程序类的OnLaunched()方法中。如果你试图使用MessageDialog来显示启动异常之类的内容,那么这一点很重要。

我的测试表明,如果Window.Current.Active()尚未被调用,MessageDialog.ShowAsync()实际上可能会等待,但对话框不会显示,因此从代码执行的角度来看,一切都像是正常工作,但却没有显示对话框。

如果目标是在启动时显示异常,我可以想到两个选项(可能还有其他选项)。

  1. 捕获异常信息,然后等待在Window.Current.Activate()之后再显示它。如果异常使应用程序可以从中恢复并继续启动,则此方法可行。例如,如果在恢复保存的状态信息时出现错误,应用程序可能希望向用户报告该错误,但然后继续启动,就好像没有保存状态一样。

  2. 如果情况是应用程序已经放弃并打算终止,但想让用户知道发生了什么,那么另一个解决方案可能是拥有一个单独的专用代码块/方法,将一个新的干净框架插入到Windows.Current.Content中,使用Windows.Current.Activate()激活它,然后调用MessageDialog.ShowAsync()。我没有尝试过这种方法,所以不确定是否还需要满足其他条件,例如可能需要将页面加载到该框架中。


0

用于页面的样式:

private async void AppBarButton_Click(object sender, RoutedEventArgs e)
{
    Windows.UI.Popups.MessageDialog a = new Windows.UI.Popups.MessageDialog("hello this is awth");
    await a.ShowAsync();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接