簡體   English   中英

如果子窗口處於活動狀態,則禁止關閉父窗口

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM