2011-01-19 114 views
3

又一個簡單的問題。我使用WPF中的窗口作爲子窗口,我寧願讓'X'按鈕隱藏窗口而不是關閉窗口。對於這一點,我有:WPF隱藏窗口關閉事件防止應用程序終止

private void Window_Closing(object sender, CancelEventArgs e) { 
    this.Hide(); 
    e.Cancel = true; 
} 

的問題是,當關閉父窗口,這永遠不會關閉,並保持應用程序活着。

有沒有一種乾淨的方式來處理這個問題?我想添加一個殺標誌,我所有的用戶控件(窗口)的:

public bool KillMe; 

private void Window_Loaded(object sender, RoutedEventArgs e){ 
    KillMe = false; 
} 

private void Window_Closing(object sender, CancelEventArgs e) { 
    this.Hide(); 
    if (!KillMe) e.Cancel = true; 
} 

然後在MainWindow_Closing()我會向所有窗口KILLME標誌設置爲true。

比創建其他標誌並在關閉之前忘記設置它們更好嗎?

回答

7

您可以在「父母」的關閉處理程序中調用Shutdown ...這將導致您的取消被忽略。

Window.Closing

如果關機之稱,是提高了每個窗口的關閉事件。但是,如果關閉取消,取消將被忽略。

2

對於這種情況,我平時有自己的AppGeneral靜態類。當我真的退出應用程序時,我將AppGeneral.IsClosing static bool設置爲true。然後,收盤時:

private void Window_Closing(object sender, CancelEventArgs e) { 
if (!AppGeneral.IsClosing) 
    { 
    this.Hide(); 
    e.Cancel = true; 
    } 
} 

此外,您還可以殺死自己的進程(這是醜陋的,但工作:))Process.GetCurrentProcess().Kill();

1

您應該使用

Application.Current.Shutdown();

你的主內窗戶關閉方法。

這應該覆蓋取消任何子窗口!

+0

直指點。我可以證實這個作品。 – bonitzenator 2016-09-01 10:06:40