2011-04-05 1 views
1

WPF NavigationWindow와 일부 Pages를 사용하고 있으며 응용 프로그램이 페이지에서 닫힐 때를 알 수 있기를 원합니다.
NavigationWindow_Closing 이벤트 처리기에서 페이지를 적극적으로 알리지 않고 어떻게 수행 할 수 있습니까?페이지에서 WPF 앱 닫기를 취소하는 방법?

나는 here 기술을 알고 있지만 불행히도 NavigationService_Navigating은 응용 프로그램을 닫을 때 호출되지 않습니다.

+0

응용 프로그램이 t를 결정할 때 '페이지'에 알림을 보내야 함을 의미합니다 가까운? 페이지를 호스팅하는'Window'에서 이미 할 수없는 일은 무엇입니까? – Jon

+0

@ 존 : 예를 들어 페이지에서 일부 UI 요소의 상태를 설정에 저장해야 할 수 있습니다. 창에는 이러한 UI 요소에 대한 액세스 권한이 없습니다. – Marc

답변

1

한 가지 방법은 인터페이스와 같은 페이지를 참여 지원이있다 자식이 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; 
} 
+0

[+1] 내 방법은 CancelApplicationClosing()이라고 불렀지 만 지금은 정확히이 해결책을 생각해 냈습니다 :-) – Marc

2

정확하게 이해하면 NavigationWindow에 호스팅 된 콘텐츠에 액세스하는 방법에 문제가 있습니다. 창 자체가 닫히고 있음을 알면 간단합니다. 구독 할 수있는 Closing 이벤트가 있습니다.

는 유일 WebBrowser 제어를 찾을 때까지 NavigationWindow에서 호스팅 Page, 당신은 그 하위 드릴 다운 VisualTreeHelper을 사용할 수 있습니다 얻으려면. 이 코드는 수동으로 코딩 할 수 있지만 그물에는 good code like this을 사용할 준비가되어 있습니다.

WebBrowser을 얻은 후 WebBrowser.Document 속성이있는 콘텐츠를 쉽게 얻을 수 있습니다. 확인,

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

    public bool CanClose() 
    { 
     return false; 
    } 
} 

탐색 창에서 :

public interface ICanClose 
{ 
    bool CanClose(); 
} 

페이지 수준에서이 인터페이스를 구현 :이 작업을 수행하는