Как отменить закрытие приложения WPF со страницы?

Я использую WPF NavigationWindow и некоторые страницы и хотел бы знать, когда приложение закрывается со страницы.
Как это можно сделать без активного уведомления страницы из обработчика событий NavigationWindow_Closing?

Я знаю о технике здесь, но, к сожалению, NavigationService_Navigating не вызывается, когда приложение закрыто.

2 ответа

Решение

Один из способов сделать это - задействовать страницы, поддерживающие такой интерфейс, как:

public interface ICanClose
{
     bool CanClose();
}

Реализуйте этот интерфейс на уровне страницы:

public partial class Page1 : Page,  ICanClose
{
    public Page1()
    {
        InitializeComponent();
    }

    public bool CanClose()
    {
        return false;
    }
}

В окне навигации проверьте, является ли дочерний элемент ICanClose:

private void NavigationWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    ICanClose canClose = this.Content as ICanClose;

    if (canClose != null && !canClose.CanClose())
        e.Cancel = true;
}

Если я вас правильно понимаю, ваша проблема в том, как получить доступ к содержимому, размещенному внутри NavigationWindow, Знать, что само окно закрывается, тривиально, например, есть Closing событие, на которое вы можете подписаться.

Чтобы получить Page размещенный в NavigationWindow, ты можешь использовать VisualTreeHelper сверлить его потомков, пока не найдете один и только WebBrowser контроль. Вы можете кодировать это вручную, но в сети есть хороший подобный код.

После того, как вы получите WebBrowserлегко получить доступ к содержанию с WebBrowser.Document имущество.

Другие вопросы по тегам