Как я могу запустить MessageBox.Show () из App.xaml.cs - PullRequest
4 голосов
/ 23 сентября 2011

Могу ли я запустить MessageBox.Show () из App.xaml.cs, чтобы он отображался на текущей странице.Пожалуйста, предоставьте некоторый код для этого решения или другое решение.Мне нужно показать системное сообщение, которое относится ко всему приложению.

Ответы [ 5 ]

7 голосов
/ 23 сентября 2011

Не уверен, но разве это не сработает?

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

Вы также можете использовать навигационные данные, доступные в App.xaml.cs, чтобы определить текущую страницу и выполнить на этой странице.

Я думаю, что бы вы ни придумали, приложение должно быть в стабильном состоянии, вы, вероятно, не сможете сделать это, когда обрабатываете (необработанное) исключение. Вы должны рассказать нам немного больше, чтобы мы поняли, почему вы хотите это сделать. Кажется, что-то не так с вашей настройкой, если вам нужно вызвать MessageBox.Show из App.xaml.cs

4 голосов
/ 23 сентября 2011

Простой подход был бы ...

  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'Метод является статическим, вы можете просто вызвать его из любого места.Конечно, само собой разумеется, что это не самый «чистый» или самый надежный подход, но он будет работать.

1 голос
/ 25 июля 2015

Я использовал эту выдержку из этой ссылки 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();
    }
1 голос
/ 23 сентября 2011

Из вашего вопроса я понял, что вы ищете способ отображения сообщения из App.xaml.cs, когда в вашем приложении происходит какое-то событие в другом месте.

Вы можете иметь шаблон наблюдателя , реализованный с App.xaml.cs, зарегистрированным для события, которое может быть вызвано вашей пользовательской страницей.

Сказав, что в долгосрочной перспективе я предлагаю вам использовать среду обмена сообщениями для этой цели.Большинство инфраструктур MVVM поставляются с инфраструктурой обмена сообщениями.Они просты в использовании и практически не требуют обучения.

  1. MVVM Light
  2. Простой MVVM
  3. PRISM из шаблонов и практик MS.(для больших приложений) Это не просто инфраструктура MVVM.
  4. Сверхлегкий MVVM

Есть еще много таких платформ.

0 голосов
/ 26 августа 2015

Не повезло с другими найденными решениями:

CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync

Работает на Windows Phone 8.1 для вызова потока MessageDialog для пользовательского интерфейса из App.xaml.cs.

...