2016-05-19 7 views
2

Ich verwende Mahapp und ich versuche, das Ergebnis des Dialogs zu warten, aber der Compiler unterstrichen ShowMessageAsync und mich an:Kann nicht await auf ShowMessageAsync verwenden

ShowMessageAsync doesn't exist in the current context

Dies ist der Code:

private async void ShowMessageBox(object sender, RoutedEventArgs e) 
{ 
    var result = await ShowMessageAsync("Hello!", "Welcome to the world of metro!", 
     MahApps.Metro.Controls.MessageDialogStyle.AffirmativeAndNegative); 
    if (result == MessageDialogResult.Affirmative) 
    { 
     this.ShowMessageAsync("Result", "You said: OK"); 
    } 
    else 
    { 
     this.ShowMessageAsync("Result", "You said: CANCEL"); 
    } 
} 
+1

haben Sie hinzugefügt alle Namensraum benötigt? – WPMed

+1

@WPMed Ja, ich habe hinzugefügt: 'mit MahApps.Metro.Controls.Dialogs;' – Dillinger

Antwort

2

Erweiterungsmethode für mahapps Asynchron-Nachrichtenfeld.

using System.Windows; 
using MahApps.Metro.Controls; 
using MahApps.Metro.Controls.Dialogs; 
using System.Threading.Tasks; 
public static class InfoBox 
{ 
    public async static Task<MessageDialogResult> ShowMessageAsync(string title, string Message, MessageDialogStyle style = MessageDialogStyle.Affirmative, MetroDialogSettings settings = null) 
    { 
     return await ((MetroWindow)(Application.Current.MainWindow)).ShowMessageAsync(title, Message, style, settings); 
    } 
} 

Nutzungs

var res = await InfoBox.ShowMessageAsync(...); 
if (res == MessageDialogResult.Affirmative) 
{ 
    /* Do something*/ 
} 
+0

Das scheint zu funktionieren, aber wenn ich das Ergebnis erhalten möchte, '' Ergebnis "am Ende hinzufügen? – Dillinger

+1

@Dillinger var res = warten InfoBox.ShowMessageAsync (...) dann if (res == MessageDialogResult.Affirmative) {/ * Etwas tun * /} –

0

Sie müssen das this Schlüsselwort hinzufügen, da die ShowMessageAsync eine Erweiterungsmethode ist und kein Mitglied der MetroWindow Klasse.

var result = await this.ShowMessageAsync("Hello!", ...); 
       //^^^^^ here 

Sie haben einen anderen Fehler. Statt:

MahApps.Metro.Controls.MessageDialogStyle.AffirmativeAndNegative 

Verwendung:

MahApps.Metro.Controls.Dialogs.MessageDialogStyle.AffirmativeAndNegative 

Und Sie müssen abgewartet werden, bevor diese Zeilen hinzufügen:

if (result == MessageDialogResult.Affirmative) 
{ 
    await this.ShowMessageAsync("Result", "You said: OK"); 
    //^^^^ here 
} 
else 
{ 
    await this.ShowMessageAsync("Result", "You said: CANCEL"); 
    //^^^^ here 
} 
+0

Wenn ich 'this.' hinzufügen gibt es einen weiteren Fehler:' 'MessageDialogResult' enthält keine Definition von 'GetAwaiter' und hat nicht Es wurde keine Erweiterungsmethode 'GetAwaiter' gefunden, die ein erstes Argument vom Typ 'MessageDialogResult' akzeptiert. Vermutlich fehlt eine using-Direktive oder eine Assembly-Referenz. – Dillinger

+0

@Dillinger Welche Zeile verursacht diesen Fehler? – Nasreddine

+0

Ich habe die gleiche Fehlermeldung, aber mit der ShowMetroDialogAsync-Methode. –

Verwandte Themen