[英]Prevent to close parent window if child windows are active
我正在開發多實例WPF應用程序。 應用程序在主屏幕上有一個網格,雙擊網格行,將打開子窗口。 它還具有從主屏幕雙擊網格行來打開多個子窗口的功能。
如果子窗口處於活動狀態,有人可以幫助我防止父窗口關閉嗎? 因此,如果子窗口處於活動狀態,則用戶將無法關閉主窗口。
將這些子項的“所有者”屬性設置為“主Windows”:
private void Button_Click(object sender, RoutedEventArgs e)
{
var wnd = new Window();
wnd.Owner = this;
wnd.Show();
}
然后在主窗口中關閉事件處理程序:
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (this.OwnedWindows.Count > 0)
{
MessageBox.Show("Child windows exists, you have to close'em first");
e.Cancel = true;
}
}
最后一點,這可能對您有所幫助,您可以知道,您可以從代碼的任何位置獲取應用程序主窗口的信息:
System.Windows.Application.Current.MainWindow
因此,如果您使用的是MVVM,則以上內容將幫助您設置Owner屬性。
在關閉窗口命令中,如果子窗口處於打開狀態,則禁用關閉功能。
要么
您可以做的是,當打開彈出窗口並觸發關閉命令時,make canexecute = false
。
將功能附加到主窗口的“關閉”事件,並檢查子窗口是否打開。 如果是,設置
e.cancel = true;
您有兩種選擇:
1-您可以使用ShowDialog()打開子窗口,但是直到子窗口關閉,用戶才能與父窗口進行交互。
2-您可以通過檢查來檢查當前打開的所有窗口
Application.Current.Windows
然后您可以確定是否要關閉窗口
編輯:
將以下事件處理程序添加到您的Parent.Closing
事件
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
foreach (var item in Application.Current.Windows)
{
Window window = item as Window;
if (window.Title == "YourChildWindowTitle")
{
// show some message for user to close childWindows
e.Cancel = true;
break;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.