Как отменить закрытие приложения 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
имущество.