2010-07-13 1 views
4

wpf 사용자 정의 컨트롤이 언로드되기 전에 코드를 실행하고 특정 조건이 충족되면 언로드를 취소하고 컨트롤을 현재 상태로 유지합니다.wpf에서 컨트롤을 언로드하기 전에 코드를 실행하는 방법이 있습니까? 어쩌면 언로드 이벤트 같은 거니?

이 작업을 수행 할 수있는 방법이 있습니까? ? 나는 언 로딩 이벤트와 같은 것을 볼 수 없었다? 감사합니다,

+1

이에 대한 사용 사례 무엇입니까 언로드하지 않는 이유는 무엇입니까? Window.Closing과 같이 작동하는 무언가가 원하는 것처럼 들리지만 이는 FrameworkElement.Unloaded 이벤트를 취소하는 것보다 훨씬 다릅니다. 요소가 언로드 될 때 부모와 형제의 레이아웃 주위에서 많은 일이 발생할 수 있습니다. –

+0

난 그냥 경우에 당신이 나에게 을 도울 수있는, 비슷한 문제가 http://stackoverflow.com/questions/5310724/wpf-unexpected-control-unload – Juan

답변

3

Unloaded은 컨트롤이 WPF 비주얼 트리에서 제거 될 때 시작됩니다. 내가 읽을 수있는 한, Windows Forms에는 "언로드"이벤트가 없다고 생각합니다. 그러나 "언로드"는 컨트롤이 파괴되었다는 의미가 아니라 시각 트리에서 제거 된 것입니다.

컨트롤의 참조를 부모 컨트롤에 대한 메타 데이터와 함께 코드의 별도 위치에 보관하십시오. Initialized 이벤트 핸들러에 Parent 속성에 대한 참조를 저장하여 해당 메타 데이터를 수집 할 수 있습니다.

그런 다음 Unloaded을 호출하면 Unloaded 이벤트 처리기에서 테스트를 수행하고 조건이 맞으면 컨트롤을 논리 트리에 다시 삽입하십시오. ContentControl 클래스에는 호출 할 수있는 명시 적 AddChild 보호 된 메서드가 있습니다.

조심해야 할 부작용이있을 수 있습니다. 문서에 따르면 WPF 시각 트리가 자체적으로 재구성 될 때 OS 수준에서 테마가 변경되면 Unloaded이 호출됩니다.

0

System.Windows.Controls.Control에 Unloaded 이벤트가 있지만 우아한 방법으로 컨트롤을 언로드하는 것을 알지 못합니다.

+0

yea..i 언로드 이벤트하지만에 따라에 대해 알고 언로드되는 것을 막을 필요가있는 특정 조건 ... – guest

+0

UserControl이어야합니까? 또는 특정 조건이 충족되지 않으면 닫지 않는 모달 대화 상자를 사용할 수 있습니까? – andyp

0
private void UserControl_Unloaded(object sender, RoutedEventArgs e) 
{ 
    if (ConditionsMet) { e.Handled = true; } 
} 

이 ConditionsMet 경우 언로드 이벤트가 사실은 이제부터는 VisualTree의 컨트롤을 유지하기 위해 설정됩니다 - 컨트롤은

+1

이것은 내 테스트에서 작동하지 않습니다. e.Handled = true; 무시된다. – OfficeAddinDev