上一篇發現模態視窗 Visibility.Hidden 後再 Visible 會失去模態特性。微軟原始碼在 DoDialogHide 中將 _showingAsDialog = false,導致後續判斷錯誤。解決方案是隱藏後再次呼叫 ShowDialog 而非設 Visibility。
使用上篇相同代碼:
IsCancel="True") → 視窗關閉ShowDialog 內部透過 ComponentDispatcher.PushModal / Dispatcher.PushFrame 實現模態。第二次呼叫時,內部旗標狀態不一致,導致取消命令未正確路由。
WPF Window 狀態機設計存在多處邏輯缺陷,開發者需避免「隱藏-顯示」模式,嚴格使用 ShowDialog/Close 配對。