2017-09-13 21 views
1

我用兩個線程,人會問,在WPFMahApps MessageDialog用戶問題,MahApp MessageDialog隱藏

另一個我想隱藏MessageDialog,如何隱藏MessageDialog在下面的代碼HideMessageDialog()

我正在做一些事情,需要中斷問題,並保持主窗口同時打開。所以我需要一種方法來隱藏對話框真正顯示後的對話框。

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


的MessageDialog會顯示這樣的,鑲嵌在主窗口:

enter image description here

+0

好於隱藏它在'Execute(bool hide)'中傳遞bool參數,然後根據傳遞的參數,調用'Task showAsk = new Task(ShowAskingDialog); showAsk.Start();' –

+0

謝謝,我想要做的是在對話框真正顯示後,如何隱藏它,因爲我正在做的事情需要中斷問題,並且必須保持主窗口在同時。我會把這個祕密加入到問題中。 –

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

       } 
      ); 
}