2014-04-07 15 views
50

Chcę użyć MessageBox do pokazania błędów pobierania w mojej aplikacji WP8.1.Aplikacje uniwersalne MessageBox: "Nazwa" MessageBox "nie istnieje w bieżącym kontekście"

I dodaje:

using System.Windows; 

ale gdy wpisuję:

MessageBox.Show(""); 

otrzymuję błąd:

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

W Object Browser Uważam, że taka klasa powinna istnieć w " Project-> Add reference ... -> Assemblies-> Framework "pokazuje, że odnoszą się do wszystkich zespołów.

Czy coś mi brakuje? A może jest inny sposób pokazywania czegoś takiego jak Messagebox?

Odpowiedz

102

W przypadku aplikacji uniwersalnych nowe interfejsy API wymagają użycia await MessageDialog().ShowAsync() (w systemie Windows.UI.Popups) w celu dostosowania ich do wersji 8.1.

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

To pomogło, dzięki. – sprrw

+4

Cała firma Async jest jak wirus. Zaczynasz je umieszczać w jednym miejscu i rozprzestrzenia się na wszystko, co sprawia, że ​​odmieniasz dużą ilość kodu. Nie jestem pewien czy to jest zamierzone lub robię coś złego – Rajiv

+0

@ Rajav afaik jest przeznaczony, ale daj mi znać, jeśli znajdziesz coś, co jest przeciwko/wspiera to, daj mi znać. – Ave

43

Chciałem tylko dodać do odpowiedzi ZombieSheep za: również, dostosowanie jest dość łatwy

 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

spróbuj tego:

using Windows.UI.Popups; 

Kod:

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(); 
     } 


    } 

Wyzwalanie niektóre Funkcja Po kliknięciu "Tak" lub "Nie", Ty ca n również używać:

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

Można również utworzyć klasę podobną do następnej. Pod kodem przykładem użycia:

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(); 
     } 
    } 

} 

Przykład go używać w klasie

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

Ta implementacja nie naśladuje takiego samego zachowania blokowania wątków jak oryginalny MessageBox i może być bardzo myląca dla nowych programistów. –