2016-05-19 6 views
2

私はMahappを使用していると私は、ダイアログの結果を待つしようとしている上でのawaitを使用することはできませんが、コンパイラはShowMessageAsyncを強調して、私を表示する:はShowMessageAsync

ShowMessageAsync doesn't exist in the current context

これはコードです:

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

あなたが必要なすべての名前空間を追加しましたか? – WPMed

+1

@WPMedはい、私が追加しました: 'MahApps.Metro.Controls.Dialogs;を使用しました。 – Dillinger

答えて

2

拡張方法:

MahApps.Metro.Controls.Dialogs.MessageDialogStyle.AffirmativeAndNegative 

そして、あなたが追加する必要がありますが、これらの行の前に待っています。

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

使用

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

これはうまくいくようですが、最後に '.Result'を追加したいのですか? – Dillinger

+1

@Dillinger var res = InfoBox.ShowMessageAsync(...)を待つif(res == MessageDialogResult.Affirmative) {/ *何か* /} –

0

ShowMessageAsyncは、拡張メソッドではなくMetroWindowクラスのメンバであるため、あなたはthisキーワードを追加する必要があります。

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

他にもエラーがあります。代わりに:

MahApps.Metro.Controls.MessageDialogStyle.AffirmativeAndNegative 

用途:mahapps非同期メッセージボックスの

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

' this 'を追加すると別のエラーが発生します: '' MessageDialogResult 'に' GetAwaiter 'の定義が含まれていない'MessageDialogResult'型の最初の引数を受け入れる拡張メソッド 'GetAwaiter'が見つかりませんでした。おそらくusingディレクティブまたはアセンブリ参照がありません。 " – Dillinger

+0

@Dillingerそのエラーの原因は何ですか? – Nasreddine

+0

同じエラーメッセージが表示されますが、ShowMetroDialogAsyncメソッドがあります。 –

関連する問題