2017-09-13 12 views
1

を隠す、1は、WPFMahApps MessageDialogMahApp MessageDialogは、私は2つのスレッドを使用してい

別のユーザーの質問を聞いてきます、私は以下のコードでHideMessageDialog()にMessageDialogを非表示にする方法、MessageDialogを非表示にしたいですか?

私は質問を中断し、同時にメインウィンドウを開いたままにする必要がある何かをやっています。だから私はダイアログが実際に表示された後にダイアログを非表示にする方法が必要です。

MessageDialogは、メインウィンドウに埋め込まれ、このように表示されます

public void Execute() 
    { 
     Task showAsk = new Task(ShowAskingDialog); 
     Task hideAsk = new Task(HideAskingByCode); 

     showAsk.Start(); 
     hideAsk.Start(); 
    } 

    public async void ShowAskingDialog() 
    { 
     Thread.Sleep(3000); 

     this.MetroDialogOptions.ColorScheme = MetroDialogColorScheme.Accented; 
     var msgbox_settings = new MetroDialogSettings { 
     AffirmativeButtonText = "I know", NegativeButtonText = "I don't know" }; 

     // puase at asking MessaageDialog 
     var isKnow = await this.ShowMessageAsync(
        "Question", "Do you know WPF?", 
        MessageDialogStyle.AffirmativeAndNegative, msgbox_settings); 

    } 

    public void HideAskingByCode() 
    { 
     Thread.Sleep(5000); 

     //How to Hide the MessageDialog by code, not by user click Button? 
     HideMessageDialog(); 
    } 

enter image description here

+0

'Execute(bool hide)'にboolパラメータを渡して隠すよりも、渡された引数に応じて 'Task showAsk = new Task(ShowAskingDialog);を呼び出します。 showAsk.Start(); ' –

+0

おかげさまで、私は、ダイアログを実際に表示した後に、どのように非表示にしたいのですか?質問を中断する必要があり、メインウィンドウを開いたままにしておかなければならないためです。同時。私はこのdetialをquesitonに追加します。 –

+1

それがそうであれば[これはあなたのために便利かもしれません](https://stackoverflow.com/questions/37789431/hide-all-visible-metro-dialogs-before-showing-another-one) –

答えて

0

@Nobodyのおかげとthe answerを、

はMessageDialogは、一般的な使用することができます隠しますHideMetroDialogAsync()

public void HideMessageDialog() 
{  
    this.Dispatcher.Invoke(
     async() =>{ 

      BaseMetroDialog dialogBeingShow = 
       await this.GetCurrentDialogAsync<BaseMetroDialog>(); 

      //Hide Current Single Dialog 
      if(dialogBeingShow != null) 
       await this.HideMetroDialogAsync(dialogBeingShow); 

      //Or Hide All Dialogs 
      while (dialogBeingShow != null) 
      { 
       await this.HideMetroDialogAsync(dialogBeingShow); 
       dialogBeingShow = 
        await this.GetCurrentDialogAsync<BaseMetroDialog>(); 
      } 

       } 
      ); 
} 
関連する問題