我正在創建一個顯示一些警報的應用程序。用MessageBox.Show它可以,但它對這個項目來說很醜。它的地鐵就像應用程序一樣,所以我們創建了一個類似Metro的MessageBox。暫停執行,如MessageBox或Dialog
我們的自定義MessageBox是一個網格,當我們需要它時,它會改變其可見性。 問題是,一個真正的MessageBox會停止執行util,用戶點擊它的「ok」。
那麼,我該如何模擬這種行爲呢?
我正在創建一個顯示一些警報的應用程序。用MessageBox.Show它可以,但它對這個項目來說很醜。它的地鐵就像應用程序一樣,所以我們創建了一個類似Metro的MessageBox。暫停執行,如MessageBox或Dialog
我們的自定義MessageBox是一個網格,當我們需要它時,它會改變其可見性。 問題是,一個真正的MessageBox會停止執行util,用戶點擊它的「ok」。
那麼,我該如何模擬這種行爲呢?
將您的自定義消息框設置爲表單。然後你可以打電話customMessageBoxFormInstance.ShowDialog()
..其中塊與消息框完全相同。
這是你會做什麼:
MessageBox
一種形式。也許你可以移動你的網格。DialogResult
屬性設置爲OK
。使用此,無論你想你的警報顯示:
if (customMessageBoxInstance.ShowDialog() == DialogResult.OK) {
// they clicked okay..
}
如你期望MessageBox
做這將阻止正好..
我想我不能。我正在使用MVVM和MVVM。 –
你可以在'Window'上:http://msdn.microsoft.com/en-us/library/system.windows.window.showdialog.aspx –
您的自定義顯示需要阻止,直到單擊該按鈕,所以此僞代碼應該工作,但可能存在更好的解決方案。 MessageBox的用戶界面理想情況下運行在一個單獨的線程上,但Show將從您的主線程中調用。
void Show()
{
// set MessageBox visible
...
// Wait until ok is pressed
while(!complete){
Thread.sleep(100);
};
complete = false;
return;
}
// onClick handler for the OK button
void onClick()
{
complete = true;
// set message box invisible
}
private bool complete;
我用MVVM一個DialogService - 你可以爲您的CustomMessagebox實現此功能。
var result = this.customMessageboxDialogService.ShowDialog("Dialogwindow title goes here", dialogwindowVM);
... do anything with the dialog result...
這裏是我做了什麼:
<Grid>
<Grid x:Name="DialogOverlay">
</Grid>
<Grid x:Name="ViewContainer">
<Grid>
</Grid>
當顯示一個模式對話框,把它放在DialogOverlay,使覆蓋可見光和禁用ViewContainer電網。這可以防止用戶點擊/切換到常規用戶界面。
當對話框關閉時,應該隱藏這個對話框並啓用ViewContainer。
+1 ..在完成工作的同時,它還允許訪問應用程序的其他部分,如果設計需要/允許的話,例如允許轉到不同的選項卡。 –
是的,你可以在任何你喜歡的位置嵌套這個構造,這樣你就可以阻止正在更新/等待的那部分UI。 –
顯示另一個線程上的消息框 –
'.ShowDialog()'...? –
@ByteBlast爲什麼在另一個線程?請給我解釋一下。 –