Как отменить закрытие приложения WPF со страницы? - PullRequest
1 голос
/ 05 апреля 2011

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

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

Ответы [ 2 ]

2 голосов
/ 05 апреля 2011

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

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

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

1 голос
/ 05 апреля 2011

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

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;
}
...