FrameworkElement.Loaded 이벤트
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
FrameworkElement가 생성되어 개체 트리에 추가되고 상호 작용할 준비가 되었을 때 발생합니다.
// Register
event_token Loaded(RoutedEventHandler const& handler) const;
// Revoke with event_token
void Loaded(event_token const* cookie) const;
// Revoke with event_revoker
FrameworkElement::Loaded_revoker Loaded(auto_revoke_t, RoutedEventHandler const& handler) const;
public event RoutedEventHandler Loaded;
function onLoaded(eventArgs) { /* Your code */ }
frameworkElement.addEventListener("loaded", onLoaded);
frameworkElement.removeEventListener("loaded", onLoaded);
- or -
frameworkElement.onloaded = onLoaded;
Public Custom Event Loaded As RoutedEventHandler
<frameworkElement Loaded="eventhandler"/>
이벤트 유형
예제
로드 및 언로드에 대한 처리기는 지원을 위해 프로젝트 템플릿의 NavigationHelper 클래스를 사용하는 모든 페이지에 자동으로 연결됩니다. 이벤트 배선은 생성자에서 수행됩니다. 처리기는 람다를 사용하여 작성되며 페이지 탐색에서 마우스 또는 키보드 이벤트를 사용할 수 있도록 다른 이벤트 처리기를 연결합니다.
this.Page.Loaded += (sender, e) =>
{
// Keyboard and mouse navigation only apply when occupying the entire window
if (this.Page.ActualHeight == Window.Current.Bounds.Height &&
this.Page.ActualWidth == Window.Current.Bounds.Width)
{
// Listen to the window directly so focus isn't required
Window.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated +=
CoreDispatcher_AcceleratorKeyActivated;
Window.Current.CoreWindow.PointerPressed +=
this.CoreWindow_PointerPressed;
}
};
Loaded 이벤트는 테마 애니메이션 또는 기타 트리거에 연결되지 않은 데코레이트 애니메이션을 시작하는 데 적합한 시간입니다. 이 예제에서는 애니메이션 Storyboard에서 Begin을 호출하는 메서드에 로드된 처리기를 연결하여 XAML에서 PointAnimation을 트리거하는 방법을 보여 줍니다.
<Canvas Width="450" Height="350">
<Canvas.Resources>
<Storyboard x:Name="myStoryboard">
<!-- Animate the center point of the ellipse from 100 X, 300 Y
to 400 X, 100 Y over 5 seconds. -->
<PointAnimation
Storyboard.TargetProperty="Center"
Storyboard.TargetName="MyAnimatedEllipseGeometry"
Duration="0:0:5"
From="100,300"
To="400,100"
RepeatBehavior="Forever" EnableDependentAnimation="True"/>
</Storyboard>
</Canvas.Resources>
<Path Fill="Blue" Loaded="Start_Animation">
<Path.Data>
<!-- Describes an ellipse. -->
<EllipseGeometry x:Name="MyAnimatedEllipseGeometry"
Center="200,100" RadiusX="15" RadiusY="15" />
</Path.Data>
</Path>
</Canvas>
// Start the animation when the object loads
void SampleApp::Page::Start_Animation(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
myStoryboard->Begin();
}
// Start the animation when the object loads
private void Start_Animation(object sender, RoutedEventArgs e)
{
myStoryboard.Begin();
}
' Start the animation when the object loads
Private Sub Start_Animation(ByVal sender As Object, ByVal e As EventArgs)
myStoryboard.Begin()
End Sub
설명
이 이벤트는 RoutedEventHandler 대리자와 RoutedEventArgs 를 이벤트 데이터로 사용하지만 이벤트는 라우트된 이벤트가 아닙니다. 이벤트를 시작하는 요소(즉, 보낸 사람)에서만 처리할 수 있습니다. 이 이벤트에 대한 이벤트 데이터의 OriginalSource는 항상 null입니다.
로드된 개체 수명
Windows 런타임 구현에서 Loaded 이벤트는 컨트롤 템플릿이 적용된 후에 발생하도록 보장되며 XAML 템플릿을 적용하여 만든 개체에 대한 참조를 가져올 수 있습니다.
Loaded 이벤트는 템플릿에서 온 요소에 대한 이벤트 처리기를 연결하거나 적용된 템플릿의 결과인 자식 요소의 존재에 의존하는 논리를 호출하는 지점으로 사용할 수 있습니다. 로드는 UI에 대한 XAML 컨트롤을 표시하기 전에 앱 코드로 요소 트리 구조를 조작하기 위한 기본 개체 수명 이벤트입니다. 초기 레이아웃에서도 발생하는 다른 이벤트가 없는 경우 템플릿에 정의된 초기 뷰 상태를 설정하기 위해 로드된 처리기에서 VisualStateManager.GoToState 메서드를 호출하는 것도 적절합니다(SizeChanged 는 초기 레이아웃에서 발생).
Windows 런타임 구현에서 Loaded의 타이밍은 WPF(Windows Presentation Foundation) 구현의 타이밍과 비슷합니다. 반면 Microsoft Silverlight 구현에는 로드될 때 로드되는 템플릿을 사용할 수 없는 타이밍 문제가 있습니다. 이러한 XAML 프레임워크에서 XAML 또는 코드 숨김을 마이그레이션하는 경우 로드된 처리기에서 수행하는 작업을 Windows 런타임 구현의 템플릿 로드 타이밍에 적합하도록 조정할 수 있습니다.
적용된 템플릿에서 제공되는 항목에 액세스하려면 VisualTreeHelper 정적 메서드를 사용하고 인덱스별로 자식 요소를 탐색할 수 있습니다. 또는 템플릿 콘텐츠의 루트 요소에서 FindName 메서드를 호출하여 지정된 x:Name 특성 값이 있는 템플릿의 특정 부분을 찾을 수 있습니다. 개체가 해당 템플릿과 관련된 템플릿에 의해 만들어 질 때마다 생성되는 XAML 이름 범위가 있으므로 컨트롤 자체가 아닌 템플릿 루트에서 FindName 을 호출해야 합니다(자세한 내용은 XAML 이름 범위 참조). 템플릿 루트 VisualTreeHelper.GetChild(target,0)
로 돌아가려면 여기서 target
은 템플릿이 적용되는 개체입니다. 해당 루트가 있으면 그 후에 명명된 파트에 도착할 수 있습니다.
기존 컨트롤에서 파생되는 경우 instance 기준으로 Loaded를 처리하는 대신 OnApplyTemplate을 재정의하여 동작을 기본 클래스 동작의 일부로 만들 수 있습니다. OnApplyTemplate 은 적용된 템플릿의 개체 트리가 있고 이제 시각적 개체를 검사하거나 조정하려는 이 상황에 대한 콜백으로 특별히 사용됩니다. 이는 시작 시각적 상태 선언 및 OnEvent 재정의 패턴을 사용하여 정의할 수 없는 배선 클래스 처리기와 같은 작업을 포함하여 사용자 지정 컨트롤에 대한 동작을 정의하는 핵심 부분입니다. 한 가지 차이점은 OnApplyTemplate scope GetTemplateChild를 사용하여 FindName이 아닌 명명된 부분을 찾아야 한다는 것입니다.
LayoutUpdated 는 관련 이벤트입니다. LayoutUpdated 이벤트는 컨트롤을 사용하도록 설정하는 시퀀스의 마지막 "개체 수명" 이벤트이며 로드된 후에 발생합니다. 그러나 LayoutUpdated 는 트리의 연속 부모뿐만 아니라 레이아웃 변경과 관련된 개체에 대해 발생합니다. UI의 여러 개체가 동시에 LayoutUpdated 를 발생할 수 있습니다. 레이아웃 변경은 사용자가 보기 상태 또는 화면 해상도를 변경하거나 동일한 UI 또는 레이아웃 컨테이너에 있는 다른 요소의 프로그래밍 방식 크기 조정과 같은 다양한 이유로 발생합니다. 이러한 이유로 Loaded는 일반적으로 초기 레이아웃 또는 적용된 템플릿에서 작동하는 코드를 실행하는 데 더 적합합니다.
페이지 간 탐색을 사용하는 앱 코드의 경우 대상 페이지에서 요소 조작 또는 컨트롤의 상태 변경 에 Page.OnNavigatedTo 를 사용하지 마세요. OnNavigatedTo 가상 메서드는 템플릿이 로드되기 전에 호출되므로 템플릿의 요소를 아직 사용할 수 없습니다. 대신 새로 로드된 페이지 콘텐츠의 루트에 Loaded 이벤트 처리기를 연결하고 Loaded 이벤트 처리기에서 요소 조작, 상태 변경, 이벤트 배선 등을 수행합니다.