개체 수명 이벤트Object Lifetime Events

이 항목에서는 생성, 사용 및 소멸 등의 개체 수명 단계를 나타내는 특정 WPFWPF 이벤트에 대해 설명합니다.This topic describes the specific WPFWPF events that signify stages in an object lifetime of creation, use, and destruction.

PrerequisitesPrerequisites

이 항목에서는 WPF(Windows Presentation Foundation)Windows Presentation Foundation (WPF) 클래스의 기존 종속성 속성의 소비자 관점에서 종속성 속성을 이해하고 종속성 속성 개요 항목을 읽었다고 가정합니다.This topic assumes that you understand dependency properties from the perspective of a consumer of existing dependency properties on WPF(Windows Presentation Foundation)Windows Presentation Foundation (WPF) classes, and have read the Dependency Properties Overview topic. 이 항목의 예제를 따르려면 XAML(Extensible Application Markup Language)Extensible Application Markup Language (XAML)(XAML 개요(WPF) 참조)과 함께 WPFWPF 애플리케이션을 작성하는 방법을 알아야 합니다.In order to follow the examples in this topic, you should also understand XAML(Extensible Application Markup Language)Extensible Application Markup Language (XAML) (see XAML Overview (WPF)) and know how to write WPFWPF applications.

개체 수명 이벤트Object Lifetime Events

Microsoft .NET Framework 관리 코드의 모든 개체는 동일한 수명, 생성, 사용 및 소멸 단계 집합을 거칩니다.All objects in Microsoft .NET Framework managed code go through a similar set of stages of life, creation, use, and destruction. 또한 많은 개체에는 소멸 단계의 일부로 발생하는 종료 단계가 있습니다.Many objects also have a finalization stage of life that occurs as part of the destruction phase. WPFWPF 개체, 특히 WPFWPF가 요소로 식별하는 시각적 개체에는 개체 수명의 공통 단계 집합이 있습니다.objects, more specifically the visual objects that WPFWPF identifies as elements, also have a set of common stages of object life. WPFWPF 프로그래밍 및 애플리케이션 모델은 이러한 단계를 일련의 이벤트로 노출합니다.The WPFWPF programming and application models expose these stages as a series of events. 수명 이벤트와 관련하여 WPFWPF에는 일반적인 요소, 창 요소, 탐색 호스트 및 애플리케이션 개체 등 네 가지 기본 유형의 개체가 있습니다.There are four main types of objects in WPFWPF with respect to lifetime events; elements in general, window elements, navigation hosts, and application objects. Windows 및 탐색 호스트도 시각적 개체(요소)의 더 큰 그룹에 속합니다.Windows and navigation hosts are also within the larger grouping of visual objects (elements). 이 항목에서는 모든 요소에 공통적으로 적용되는 수명 이벤트에 대해 설명한 다음 애플리케이션 정의, 창 또는 탐색 호스트에 적용되는 특정 이벤트를 소개합니다.This topic describes the lifetime events that are common to all elements and then introduces the more specific ones that apply to application definitions, windows or navigation hosts.

요소에 대한 공통 수명 이벤트Common Lifetime Events for Elements

모든 WPF 프레임 워크 수준 요소 (FrameworkElement 또는 FrameworkContentElement에서 파생 되는 개체)에는 세 가지 일반적인 수명 이벤트 인 Initialized, LoadedUnloaded가 있습니다.Any WPF framework-level element (those objects deriving from either FrameworkElement or FrameworkContentElement) has three common lifetime events: Initialized, Loaded, and Unloaded.

초기화됨Initialized

Initialized 먼저 발생 하 고, 해당 생성자를 호출 하 여 개체를 초기화 하는 것과 거의 일치 합니다.Initialized is raised first, and roughly corresponds to the initialization of the object by the call to its constructor. 이 이벤트는 초기화에 응답하여 발생하므로 이 이벤트가 발생하면 개체의 모든 속성이 설정되어 있음을 알 수 있습니다Because the event happens in response to initialization, you are guaranteed that all properties of the object are set. (동적 리소스 또는 바인딩과 같은 식 사용은 예외 이며 계산 되지 않은 식이 됩니다.) 모든 속성을 설정 하는 요구 사항으로 인해 태그에 정의 된 중첩 된 요소에 의해 발생 하는 Initialized 시퀀스는 먼저 요소 트리에서 최하위 요소부터 발생 한 다음 루트를 향해 부모 요소가 표시 됩니다.(An exception is expression usages such as dynamic resources or binding; these will be unevaluated expressions.) As a consequence of the requirement that all properties are set, the sequence of Initialized being raised by nested elements that are defined in markup appears to occur in order of deepest elements in the element tree first, then parent elements toward the root. 순서가 이와 같은 이유는 부모/자식 관계와 포함이 속성이고 따라서 부모는 속성을 채우는 자식 요소 또한 완전히 초기화되기 전에는 초기화를 보고할 수 없기 때문입니다.This order is because the parent-child relationships and containment are properties, and therefore the parent cannot report initialization until the child elements that fill the property are also completely initialized.

Initialized 이벤트에 대 한 응답으로 처리기를 작성 하는 경우 처리기가 연결 된 위치에 대 한 요소 트리 (논리적 트리 또는 시각적 트리)의 다른 모든 요소가 생성 되는 것이 보장 되지 않는다는 것을 고려해 야 합니다. 특히 부모 elements.When you are writing handlers in response to the Initialized event, you must consider that there is no guarantee that all other elements in the element tree (either logical tree or visual tree) around where the handler is attached have been created, particularly parent elements. 멤버 변수가 null일 수 있거나 식 수준에서도 데이터 소스가 기본 바인딩으로 채워지지 않을 수도 있습니다.Member variables may be null, or data sources might not yet be populated by the underlying binding (even at the expression level).

로드됨Loaded

Loaded 다음에 발생 합니다.Loaded is raised next. Loaded 이벤트는 최종 렌더링 전에 발생 하지만 레이아웃 시스템이 렌더링에 필요한 모든 값을 계산한 후에 발생 합니다.The Loaded event is raised before the final rendering, but after the layout system has calculated all necessary values for rendering. Loaded에는 요소가 포함 된 논리적 트리가 완료 되 고 HWND 및 렌더링 화면을 제공 하는 프레젠테이션 소스에 연결 됩니다.Loaded entails that the logical tree that an element is contained within is complete, and connects to a presentation source that provides the HWND and the rendering surface. Loaded하기 전에 표준 데이터 바인딩 (예: 다른 속성 또는 직접 정의 된 데이터 소스와 같은 로컬 원본에 바인딩)이 발생 합니다.Standard data binding (binding to local sources, such as other properties or directly defined data sources) will have occurred prior to Loaded. 비동기 데이터 바인딩(외부 또는 동적 소스)이 발생할 수도 있지만 비동기라는 용어에서 유추할 수 있듯이 그 발생 여부를 보장할 수는 없습니다.Asynchronous data binding (external or dynamic sources) might have occurred, but by definition of its asynchronous nature cannot be guaranteed to have occurred.

Loaded 이벤트가 발생 하는 메커니즘은 Initialized와 다릅니다.The mechanism by which the Loaded event is raised is different than Initialized. 완료 된 요소 트리로 직접 조정 하지 않고 Initialized 이벤트는 요소에 의해 발생 합니다.The Initialized event is raised element by element, without a direct coordination by a completed element tree. 이와 반대로 Loaded 이벤트는 전체 요소 트리 (특히 논리적 트리)에서 조정 된 활동으로 발생 합니다.By contrast, the Loaded event is raised as a coordinated effort throughout the entire element tree (specifically, the logical tree). 트리의 모든 요소가 로드 된 것으로 간주 되는 상태인 경우에는 루트 요소에서 Loaded 이벤트가 먼저 발생 합니다.When all elements in the tree are in a state where they are considered loaded, the Loaded event is first raised on the root element. 그러면 각 자식 요소에서 Loaded 이벤트가 연속적으로 발생 합니다.The Loaded event is then raised successively on each child element.

참고

이 동작은 표면적으로 볼 때 라우트된 이벤트의 터널링과 유사할 수 있습니다.This behavior might superficially resemble tunneling for a routed event. 그러나 이벤트 간에 정보가 전달되지 않습니다.However, no information is carried from event to event. 각 요소에는 항상 Loaded 이벤트를 처리할 수 있는 기회가 있으며 이벤트 데이터를 처리 된 것으로 표시 해도 해당 요소를 벗어나는 효과가 없습니다.Each element always has the opportunity to handle its Loaded event, and marking the event data as handled has no effect beyond that element.

언로드됨Unloaded

Unloaded는 마지막으로 발생 하며 제거 되는 프레젠테이션 소스 또는 시각적 부모에 의해 시작 됩니다.Unloaded is raised last and is initiated by either the presentation source or the visual parent being removed. Unloaded 발생 하 고 처리 되 면 이벤트 소스 부모 (Parent 속성에 의해 결정 됨) 또는 논리적 또는 시각적 트리의 모든 지정 된 요소가 이미 설정 되지 않았을 수 있습니다. 즉, 데이터 바인딩, 리소스 참조 및 스타일을 포함 합니다. 정상 또는 마지막으로 알려진 런타임 값으로 설정할 수 없습니다.When Unloaded is raised and handled, the element that is the event source parent (as determined by Parent property) or any given element upwards in the logical or visual trees may have already been unset, meaning that data binding, resource references, and styles may not be set to their normal or last known run-time value.

수명 이벤트 애플리케이션 모델 요소Lifetime Events Application Model Elements

요소에 대 한 일반적인 수명 이벤트를 빌드하는 작업은 Application, Window, Page, NavigationWindowFrame의 응용 프로그램 모델 요소입니다.Building on the common lifetime events for elements are the following application model elements: Application, Window, Page, NavigationWindow, and Frame. 이러한 요소는 특정 목적과 관련된 추가 이벤트를 사용하여 공통 개체 수명 이벤트를 확장합니다.These extend the common lifetime events with additional events that are relevant to their specific purpose. 다음 항목에서 이에 대해 자세히 설명합니다.These are discussed in detail in the following locations:

참조See also