我如何从App.xaml.cs运行MessageBox.Show()

时间:2011-09-23 11:41:58

标签: c# windows-phone-7 messagebox

我可以从App.xaml.cs运行MessageBox.Show(),因此它显示在当前页面上。请为此解决方案或其他解决方案提供一些代码。我需要显示一些与整个应用程序相关的系统消息。

5 个答案:

答案 0 :(得分:7)

不确定,但这不起作用吗?

Deployment.Current.Dispatcher.BeginInvoke(() =>
{
 MessageBox.Show("");
}
);

您还可以使用App.xaml.cs中提供的导航数据来确定当前页面并在该页面上执行。

我想无论你想出什么,应用程序都需要处于稳定状态,当处理(未处理)异常时,你可能无法做到这一点。您应该告诉我们更多信息,以便我们理解您为什么要这样做。如果您必须从App.xaml.cs调用MessageBox.Show,那么您的设置似乎有问题

答案 1 :(得分:4)

一种简单的方法是......

  public partial class App : Application
  {
    public static void ShowBox(string msg)
    {
      MessageBox.Show(msg);
    }
  }

然后从窗口或应用程序的任何其他部分......

  public partial class MainWindow : Window
  {
    public MainWindow()
    {
      InitializeComponent();
      App.ShowBox("Hello!");
      ...

由于'ShowBox'方法是静态的,你可以从任何地方调用它。当然不言而喻,这不是真正“最干净”或最强大的方法,但它会起作用。

答案 2 :(得分:1)

我从您的问题中了解到,当您在应用程序中发生某些事件时,您正在寻找一种方法来显示来自App.xaml.cs的消息。

您可以使用为自定义页面触发的事件注册的App.xaml.cs实现观察者模式

话虽如此,从长远来看,我建议你为此目的使用消息框架。大多数 MVVM框架都带有消息传递框架。它们易于使用,没有或几乎没有学习曲线。

  1. MVVM Light
  2. 简单的MVVM
  3. 来自MS模式的PRISM&实践。 (对于更大的应用程序)这不仅仅是一个MVVM框架。
  4. 超轻MVVM
  5. 还有更多这样的框架。

答案 3 :(得分:1)

我使用了此链接中提取的http://www.c-sharpcorner.com/UploadFile/c25b6d/message-dialog-in-windows-store-apps/

private async void Delete_Click(object sender, RoutedEventArgs e)
    {
        var messageDialog = new Windows.UI.Popups.MessageDialog("Are you sure you want to permanently delete this record?");

        messageDialog.Commands.Add(new UICommand("Yes", (command) =>
        {
            //Do delete
        }));
        messageDialog.Commands.Add(new UICommand("No", (command) =>
        {
            //Do Nothing
        }));
        //default command
        messageDialog.DefaultCommandIndex = 1;
        await messageDialog.ShowAsync();
    }

答案 4 :(得分:0)

其他解决方案没有运气,发现:

CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync

适用于Windows Phone 8.1,用于从App.xaml.cs调用MessageDialog到ui线程。