개체 수명 이벤트
이 항목에서는 생성, 사용, 소멸 등의 개체 수명 단계를 나타내는 특정 WPF 이벤트를 설명합니다.
필수 조건
이 토픽에서는 Windows Presentation Foundation(WPF) 클래스의 기존 종속성 속성의 소비자 관점에서 종속성 속성을 이해하고 종속성 속성 개요 토픽을 읽었다고 가정합니다. 이 토픽의 예제를 따르려면 XAML(WPF의 XAML 참조)을 이해하고 WPF 애플리케이션을 작성하는 방법도 알아야 합니다.
개체 수명 이벤트
Microsoft .NET Framework 관리 코드의 모든 개체는 유사한 수명, 생성, 사용, 소멸 단계 집합을 거칩니다. 또한 많은 개체에는 소멸 단계의 일부로 발생하는 종료 단계가 있습니다. WPF 개체, 특히 WPF가 요소로 식별하는 시각적 개체에는 개체 수명의 공통 단계 집합이 있습니다. WPF 프로그래밍 및 애플리케이션 모델은 이러한 단계를 일련의 이벤트로 노출합니다. 수명 이벤트와 관련하여 WPF에는 일반적인 요소, 창 요소, 탐색 호스트 및 애플리케이션 개체 등 네 가지 기본 유형의 개체가 있습니다. Windows 및 탐색 호스트도 시각적 개체(요소)의 더 큰 그룹에 속합니다. 이 항목에서는 모든 요소에 공통적으로 적용되는 수명 이벤트에 대해 설명한 다음 애플리케이션 정의, 창 또는 탐색 호스트에 적용되는 특정 이벤트를 소개합니다.
요소에 대한 공통 수명 이벤트
모든 WPF 프레임워크 수준 요소(FrameworkElement 또는 FrameworkContentElement에서 파생되는 개체)에는 세 가지 공통 수명 이벤트, 즉 Initialized, Loaded, Unloaded가 있습니다.
초기화됨
Initialized는 가장 먼저 발생하며, 개체 생성자를 호출하여 개체가 초기화되는 시점에 해당합니다. 이 이벤트는 초기화에 응답하여 발생하므로 이 이벤트가 발생하면 개체의 모든 속성이 설정되어 있음을 알 수 있습니다 (동적 리소스 또는 바인딩과 같은 식 사용은 예외임; 이러한 식은 평가되지 않은 식임.) 모든 속성이 설정되어야 하므로, 태그에 정의된 중첩 요소에 의해 발생하는 Initialized 시퀀스는 요소 트리의 가장 아래에 있는 요소부터 시작하여 루트를 향해 부모 요소의 순서로 발생합니다. 순서가 이와 같은 이유는 부모/자식 관계와 포함이 속성이고 따라서 부모는 속성을 채우는 자식 요소 또한 완전히 초기화되기 전에는 초기화를 보고할 수 없기 때문입니다.
Initialized 이벤트에 대한 응답으로 처리기를 작성하는 경우 처리기가 연결된 요소 트리(논리적 트리 또는 시각적 트리)의 다른 모든 요소, 특히 부모 요소가 만들어졌다고 보장할 수 없다는 것을 고려해야 합니다. 멤버 변수가 null일 수 있거나 식 수준에서도 데이터 소스가 기본 바인딩으로 채워지지 않을 수도 있습니다.
로드됨
Loaded가 다음으로 발생합니다. Loaded 이벤트는 최종 렌더링 전에 발생하지만 레이아웃 시스템이 렌더링에 필요한 모든 값을 계산한 후에 발생합니다. Loaded를 통해 요소가 포함된 논리적 트리가 완료되고 HWND 및 렌더링 화면을 제공하는 프레젠테이션 소스에 연결됩니다. 표준 데이터 바인딩(다른 속성 또는 직접 정의된 데이터 원본과 같은 로컬 소스에 바인딩)은 Loaded 이전에 발생합니다. 비동기 데이터 바인딩(외부 또는 동적 소스)이 발생할 수도 있지만 비동기라는 용어에서 유추할 수 있듯이 그 발생 여부를 보장할 수는 없습니다.
Loaded 이벤트를 발생시키는 메커니즘은 Initialized와 다릅니다. Initialized 이벤트는 완성된 요소 트리에 의한 직접적인 조정 없이 요소별로 발생합니다. 반대로 Loaded 이벤트는 전체 요소 트리(특히 논리적 트리)의 조정을 통해 발생합니다. 트리의 모든 요소가 로드된 것으로 간주되는 상태가 되면 가장 먼저 루트 요소에서 Loaded 이벤트가 발생합니다. 그런 다음 각 자식 요소에서 Loaded 이벤트가 연속해서 발생합니다.
참고
이 동작은 표면적으로 볼 때 라우트된 이벤트의 터널링과 유사할 수 있습니다. 그러나 이벤트 간에 정보가 전달되지 않습니다. 각 요소는 항상 Loaded 이벤트를 처리할 수 있으며, 이벤트 데이터가 처리된 것으로 표시해도 해당 요소 외에는 아무런 영향을 미치지 않습니다.
언로드됨
Unloaded는 마지막에 발생하며, 프레젠테이션 소스 또는 제거될 시각적 부모에 의해 시작됩니다. Unloaded가 발생하여 처리될 때 이벤트 소스 부모(Parent 속성에 의해 결정됨) 또는 논리적 트리나 시각적 트리의 상위 요소가 이미 설정되지 않은 상태일 수 있습니다. 즉, 데이터 바인딩, 리소스 참조 및 스타일이 정상 값 또는 마지막으로 알려진 런타임 값으로 설정되지 않을 수 있습니다.
수명 이벤트 애플리케이션 모델 요소
다음 애플리케이션 모델 요소는 요소의 공통 수명 주기에 기반합니다. Application, Window, Page, NavigationWindow, Frame. 이러한 요소는 특정 목적과 관련된 추가 이벤트를 사용하여 공통 개체 수명 이벤트를 확장합니다. 다음 항목에서 이에 대해 자세히 설명합니다.
추가 정보
.NET Desktop feedback