정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

FrameworkElement.Loaded 이벤트

2013-12-13

FrameworkElement가 생성되어 개체 트리에 추가되면 이 이벤트가 발생합니다.

Namespace:  System.Windows
어셈블리:  System.Windows(System.Windows.dll)
XMLNS for XAML: xmlns에 매핑되지 않습니다.

public event RoutedEventHandler Loaded
<frameworkElement Loaded="eventhandler"/>

이 이벤트는 RoutedEventHandler 대리자 형식을 사용하지만 대부분의 Windows Phone 입력 이벤트와 달리 라우트되지는 않습니다. 그러나 개체 트리의 XAML 로드는 대체로 겉으로는 버블링 라우트된 이벤트 패턴과 유사한 패턴을 보여 줍니다. 즉, 개체가 로드되려면 먼저 모든 속성이 개체에 설정되어 있어야 합니다. 모든 XAML 속성이 값을 가진 후 자식 개체가 없는 개체 같이 가장 많이 중첩된 개체가 먼저 로드됩니다. 자식 개체가 있는 개체의 경우 해당 속성 중 하나는 자식 개체를 포함하는 속성입니다. 따라서 개체 트리를 로드할 때 Loaded 이벤트의 발생 순서는 위쪽 방향으로 발생합니다. 그러나 이 시퀀스는 실제로 자체 순서로 Loaded 이벤트를 발생하는 각 개체입니다. 다양한 Loaded 이벤트 간에 이벤트 데이터가 공유되지 않습니다. 즉, 모든 이벤트는 개별 개체 소스에 의해 발생하는 별개의 이벤트입니다.

위의 문에는 Loaded 이벤트가 트리의 역순으로 발생하는 예외가 있습니다. 따라서 Loaded 순서만 사용하여 응용프로그램 논리를 결정하지 마세요. 다음은 Loaded 순서가 달라질 수 있는 경우에 대한 몇 가지 예제입니다.

  • 대부분의 경우 적용된 컨트롤 템플릿 또는 데이터 템플릿에서 만든 개체는 Loaded를 발생하는 마지막 개체입니다. 그러나 초기 템플릿을 강제로 로드하기 위해 특정 컨트롤이 초기화 시 ApplyTemplate을 사용하는 경우 이 순서 원칙은 달라질 수 있습니다.

  • 템플릿 응용프로그램 및 ItemsControl의 항목에 대한 데이터 프레젠테이션 규칙 때문에 부모 ItemsControl을 수행한 후, 주(템플릿 형식이 아님) 개체 트리의 다른 분기가 Loaded를 발생한 후에 이러한 항목은 Loaded를 발생합니다.

레이아웃에 의해 크기가 조정될 때는 일반적으로 개체가 다시 로드되지 않습니다. SizeChanged를 참조하세요.

Loaded 및 컨트롤 개체 수명

Windows Phone의 Loaded 이벤트는 템플릿이 적용된 후 발생한다고 보장할 수 없습니다. 비교적 일반적인 컨트롤 시나리오에 Loaded 이벤트를 사용하는 경우 이로 인해 문제가 발생할 수 있습니다. 다른 항목의 소스로 값을 가져오거나 런타임에만 새 값을 알 수 있는 템플릿 기반 컴퍼지션에서 값을 변경하기 위해 시각적 트리를 검사하려고 합니다. 이 경우 Loaded 처리기에서 직접 호출하면 Windows Phone VisualTreeHelper 메서드를 호출하여 템플릿 내용의 시각적 트리를 검사하지 못할 수도 있습니다.

이 문제를 해결할 수 있는 여러 가지 방법이 있습니다. 각 해결 방법에는 장점과 가능한 제한이 있습니다.

  • 기존 컨트롤에서 파생되는 경우 Loaded 처리를 추가하는 대신 OnApplyTemplate을 재정의할 수 있습니다. OnApplyTemplate은 특히 템플릿의 트리가 있고 이제 시각 효과를 검사하거나 조정하려는 경우에 콜백으로 사용됩니다. 한 가지 제한은 기존 컨트롤을 응용프로그램의 일부로 사용하는 경우 OnApplyTemplate에 대한 설정을 변경할 수 없다는 점입니다.

  • Loaded는 계속 사용할 수 있습니다. 그러나 Loaded 처리기의 첫 번째 호출로 해당 컨트롤에 대해 ApplyTemplate을 호출합니다. ApplyTemplate은 동기 메서드이므로 해당 호출을 수행하고 반환되면 템플릿으로 만든 시각 트리가 있습니다. 이 경우 ApplyTemplate을 호출해도 Windows Phone 런타임에서 중복 작업이 수행되지는 않습니다. 한 가지 제한은 해당 요소가 Control 파생 클래스여야 한다는 점입니다.

  • Loaded 대신 LayoutUpdated를 처리할 수 있습니다. LayoutUpdated는 Windows Phone UI에서 컨트롤을 사용할 수 있도록 설정하는 시퀀스의 마지막 "개체 수명" 이벤트입니다. LayoutUpdated의 주요 제한은 초기화 시에만 LayoutUpdated가 발생하는 것은 아니라는 점입니다. 레이아웃 변경에 관련된 개체에 대해서도 LayoutUpdated가 발생합니다. 예를 들어 레이아웃의 피어가 해당 크기를 변경했을 수 있습니다. 시각적 트리와 관련해서는 피어 개체가 몇 개의 속성 값만 변경하고 트리 구조는 변경하지 않았으며, LayoutUpdated를 처리 중인 개체의 시각적 트리는 전혀 변경되지 않았을 수 있습니다. 따라서 LayoutUpdated 이벤트가 실제로 시각적 트리를 검사하거나 다시 검사해야 함을 의미하는지 여부를 확인하기 위해 고유한 논리를 적용해야 할 수 있습니다.

템플릿 응용프로그램의 타이밍 문제에 의해 영향을 받지 않는 Loaded 처리 시나리오가 있습니다. 예를 들어 템플릿 요소에 아직 액세스할 수 없더라도 Loaded가 발생하는 개체에 대해 이벤트 처리기를 추가하거나 속성을 설정할 수 있습니다. 예를 들어 코드로 개체를 만들어 이 시점에서 콘텐츠 속성이나 콘텐츠 컬렉션에 추가하거나, 초기 XAML에서 후크하지 않도록 선택한 입력 형식 이벤트 처리기를 추가할 수 있습니다.

Windows Phone OS

지원되는 버전: 8.0, 7.1, 7.0

Windows Phone

표시: