ShowDialog 顯示模態視窗 → 設 Visibility=Hidden 隱藏 → 設 Visibility=Visible 顯示 → **視窗變為非模態**,可切換回主視窗操作。
單例對話框(如「尋找/取代」),關閉時隱藏保留狀態,下次快速顯示,避免重複實例化。
主視窗:
模態視窗點擊隱藏:
再次顯示已變非模態:
Window.DoDialogHide 中:
this._showingAsDialog = false; // Cause this Bug
註解僅寫「// clears _showingAsDialog」。再次設 Visible 時,WPF 依此旗標決定是否以模態方式顯示,旗標已清除故變非模態。
隱藏時取消 Close 事件,設 Visibility.Hidden。再次顯示**必須呼叫 ShowDialog()**,不可設 Visibility.Visible。雖第二次 ShowDialog 理論會拋例外,但實測可行(WPF 內部特殊處理)。
非 UI 執行緒彈出 MessageBox 亦為非模態,解法:Dispatcher.Invoke(() => MessageBox.Show(...))。