wpf 사용자 정의 컨트롤이 언로드되기 전에 코드를 실행하고 특정 조건이 충족되면 언로드를 취소하고 컨트롤을 현재 상태로 유지합니다.wpf에서 컨트롤을 언로드하기 전에 코드를 실행하는 방법이 있습니까? 어쩌면 언로드 이벤트 같은 거니?
이 작업을 수행 할 수있는 방법이 있습니까? ? 나는 언 로딩 이벤트와 같은 것을 볼 수 없었다? 감사합니다,
wpf 사용자 정의 컨트롤이 언로드되기 전에 코드를 실행하고 특정 조건이 충족되면 언로드를 취소하고 컨트롤을 현재 상태로 유지합니다.wpf에서 컨트롤을 언로드하기 전에 코드를 실행하는 방법이 있습니까? 어쩌면 언로드 이벤트 같은 거니?
이 작업을 수행 할 수있는 방법이 있습니까? ? 나는 언 로딩 이벤트와 같은 것을 볼 수 없었다? 감사합니다,
Unloaded
은 컨트롤이 WPF 비주얼 트리에서 제거 될 때 시작됩니다. 내가 읽을 수있는 한, Windows Forms에는 "언로드"이벤트가 없다고 생각합니다. 그러나 "언로드"는 컨트롤이 파괴되었다는 의미가 아니라 시각 트리에서 제거 된 것입니다.
컨트롤의 참조를 부모 컨트롤에 대한 메타 데이터와 함께 코드의 별도 위치에 보관하십시오. Initialized
이벤트 핸들러에 Parent
속성에 대한 참조를 저장하여 해당 메타 데이터를 수집 할 수 있습니다.
그런 다음 Unloaded
을 호출하면 Unloaded
이벤트 처리기에서 테스트를 수행하고 조건이 맞으면 컨트롤을 논리 트리에 다시 삽입하십시오. ContentControl
클래스에는 호출 할 수있는 명시 적 AddChild
보호 된 메서드가 있습니다.
조심해야 할 부작용이있을 수 있습니다. 문서에 따르면 WPF 시각 트리가 자체적으로 재구성 될 때 OS 수준에서 테마가 변경되면 Unloaded
이 호출됩니다.
private void UserControl_Unloaded(object sender, RoutedEventArgs e)
{
if (ConditionsMet) { e.Handled = true; }
}
이 ConditionsMet 경우 언로드 이벤트가 사실은 이제부터는 VisualTree의 컨트롤을 유지하기 위해 설정됩니다 - 컨트롤은
이것은 내 테스트에서 작동하지 않습니다. e.Handled = true; 무시된다. – OfficeAddinDev
이에 대한 사용 사례 무엇입니까 언로드하지 않는 이유는 무엇입니까? Window.Closing과 같이 작동하는 무언가가 원하는 것처럼 들리지만 이는 FrameworkElement.Unloaded 이벤트를 취소하는 것보다 훨씬 다릅니다. 요소가 언로드 될 때 부모와 형제의 레이아웃 주위에서 많은 일이 발생할 수 있습니다. –
난 그냥 경우에 당신이 나에게 을 도울 수있는, 비슷한 문제가 http://stackoverflow.com/questions/5310724/wpf-unexpected-control-unload – Juan