首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WPF Bug 系列 (5):模態對話框 Visibility 隱藏後再顯示變成非模態

     編輯:關於.NET

問題描述

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(...))。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved