2014-04-07 11 views
50

Voglio usare MessageBox per mostrare gli errori di download nella mia app WP8.1.Universal Apps MessageBox: "Il nome 'MessageBox' non esiste nel contesto corrente"

ho aggiunto:

using System.Windows; 

ma quando digito:

MessageBox.Show(""); 

ottengo l'errore:

"The name 'MessageBox' does not exist in the current context" 

In Visualizzatore oggetti ho scoperto che tale classe dovrebbe esistere e in " Progetto-> Aggiungi riferimento ... -> Assemblies-> Framework "viene mostrato che tutti gli assembly sono referenziati.

Mi manca qualcosa? O c'è un altro modo per mostrare qualcosa come messagebox?

risposta

102

Per le app universali, le nuove API richiedono l'utilizzo di await MessageDialog().ShowAsync() (in Windows.UI.Popups) per renderlo conforme a Win 8.1.

var dialog = new MessageDialog("Your message here"); 
await dialog.ShowAsync(); 
+0

che hanno contribuito, grazie. – sprrw

+4

L'intera attività Async è come un virus. Si inizia a metterlo in un posto e si diffonde a tutto, facendovi refactoring una grande quantità di codice. Non sono sicuro se questo è inteso o sto facendo qualcosa di sbagliato – Rajiv

+0

@Rajiv afaik è inteso, ma fammi sapere se trovi qualcosa che è contro/supporta questo, fammi sapere. – Ave

43

Volevo solo aggiungere alla risposta di ZombieSheep: anche, la personalizzazione è abbastanza facile

 var dialog = new MessageDialog("Are you sure?"); 
     dialog.Title = "Really?"; 
     dialog.Commands.Add(new UICommand { Label = "Ok", Id = 0 }); 
     dialog.Commands.Add(new UICommand { Label = "Cancel", Id = 1 }); 
     var res = await dialog.ShowAsync(); 

     if ((int)res.Id == 0) 
     { *** } 
27

provare questo:

using Windows.UI.Popups; 

codice:

private async void Button_Click(object sender, RoutedEventArgs e) 
    { 

     MessageDialog msgbox = new MessageDialog("Would you like to greet the world with a \"Hello, world\"?", "My App"); 

     msgbox.Commands.Clear(); 
     msgbox.Commands.Add(new UICommand { Label = "Yes", Id = 0 }); 
     msgbox.Commands.Add(new UICommand { Label = "No", Id = 1}); 
     msgbox.Commands.Add(new UICommand { Label = "Cancel", Id = 2 }); 

     var res = await msgbox.ShowAsync(); 

     if ((int)res.Id == 0) 
     { 
      MessageDialog msgbox2 = new MessageDialog("Hello to you too! :)", "User Response"); 
      await msgbox2.ShowAsync(); 
     } 

     if ((int)res.Id == 1) 
     { 
      MessageDialog msgbox2 = new MessageDialog("Oh well, too bad! :(", "User Response"); 
      await msgbox2.ShowAsync(); 
     } 

     if ((int)res.Id == 2) 
     { 
      MessageDialog msgbox2 = new MessageDialog("Nevermind then... :|", "User Response"); 
      await msgbox2.ShowAsync(); 
     } 


    } 

per innescare un certo Funzione Quando si fa clic su "Sì" o "No", si ca n utilizzare anche:

msgbox.Commands.Add(new UICommand("Yes", new UICommandInvokedHandler(this.TriggerThisFunctionForYes))); 
msgbox.Commands.Add(new UICommand("No", new UICommandInvokedHandler(this.TriggerThisFunctionForNo))); 
1

Si potrebbe anche fare una lezione come la prossima. Di seguito il codice di un esempio di utilizzo:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Windows.UI.Popups; 

namespace someApp.ViewModels 
{ 
    public static class Msgbox 
    { 
     static public async void Show(string mytext) 
     { 
      var dialog = new MessageDialog(mytext, "Testmessage"); 
      await dialog.ShowAsync(); 
     } 
    } 

} 

L'esempio da utilizzare in una classe

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
namespace someApp.ViewModels 
{ 
    public class MyClass{ 

     public void SomeMethod(){ 
      Msgbox.Show("Test"); 
     } 

    } 
} 
+0

Questa implementazione non imita lo stesso comportamento di blocco del thread del MessageBox originale e potrebbe essere molto confuso per i nuovi sviluppatori. –