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"/>
이벤트 유형
예제
및 언로드에 대한 Loaded
처리기는 지원을 위해 프로젝트 템플릿의 클래스를 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을 트리거하는 Loaded
방법을 보여 줍니다.
<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();
}
설명
이 이벤트는 RoutedEventHandler 대리자와 RoutedEventArgs 를 이벤트 데이터로 사용하지만 이벤트는 라우트된 이벤트가 아닙니다. 이벤트를 시작하는 요소(즉, 보낸 사람)에서만 처리할 수 있습니다. 이 이벤트에 대한 이벤트 데이터의 OriginalSource는 항상 null
입니다.
로드된 개체 수명
Windows App SDK 구현 Loaded
에서는 컨트롤 템플릿이 적용된 후 이벤트가 발생하도록 보장되며 XAML 템플릿을 적용하여 만든 개체에 대한 참조를 가져올 수 있습니다.
이벤트는 Loaded
템플릿에서 온 요소에 이벤트 처리기를 연결하거나 적용된 템플릿의 결과인 자식 요소의 존재에 의존하는 논리를 호출하는 지점으로 사용할 수 있습니다. 로드는 UI에 대한 XAML 컨트롤을 표시하기 전에 앱 코드로 요소 트리 구조를 조작하기 위한 기본 개체 수명 이벤트입니다. 초기 레이아웃에서도 발생하는 다른 이벤트가 없는 경우 템플릿에 정의된 초기 뷰 상태를 설정하기 위해 로드된 처리기에서 VisualStateManager.GoToState 메서드를 호출하는 것도 적절합니다(SizeChanged 는 초기 레이아웃에서 발생).
Windows App SDK 구현의 Loaded
타이밍은 WPF(Windows Presentation Foundation) 구현의 타이밍과 비슷합니다. 반면 Microsoft Silverlight 구현에는 발생할 때 Loaded
로드되는 템플릿을 사용할 수 없는 타이밍 문제가 있었습니다. 이러한 XAML 프레임워크에서 XAML 또는 코드 숨김을 마이그레이션하는 경우 처리기에서 Loaded
수행하는 작업을 조정하여 Windows App SDK 구현의 템플릿 로드 타이밍에 적합할 수 있습니다.
적용된 템플릿에서 제공되는 항목에 액세스하려면 VisualTreeHelper 정적 메서드를 사용하고 인덱스별로 자식 요소를 탐색할 수 있습니다. 또는 템플릿 콘텐츠의 루트 요소에서 FindName 메서드를 호출하여 지정된 x:Name 특성 값이 있는 템플릿의 특정 부분을 찾을 수 있습니다. 개체가 해당 템플릿과 관련된 템플릿에 의해 만들어 질 때마다 생성되는 XAML 이름 범위가 있으므로 컨트롤 자체가 아닌 템플릿 루트에서 FindName 을 호출해야 합니다(자세한 내용은 XAML 이름 범위 참조). 템플릿 루트 VisualTreeHelper.GetChild(target,0)
로 돌아가려면 여기서 target
은 템플릿이 적용되는 개체입니다. 해당 루트가 있으면 그 후에 명명된 파트에 도착할 수 있습니다.
기존 컨트롤에서 파생되는 경우 instance 기준으로 처리하는 Loaded
대신 OnApplyTemplate을 재정의하여 동작을 기본 클래스 동작의 일부로 만들 수 있습니다.
OnApplyTemplate 은 적용된 템플릿의 개체 트리가 있고 이제 시각적 개체를 검사하거나 조정하려는 이 상황에 대한 콜백으로 특별히 사용됩니다. 이는 시작 시각적 상태 선언 및 OnEvent 재정의 패턴을 사용하여 정의할 수 없는 배선 클래스 처리기와 같은 작업을 포함하여 사용자 지정 컨트롤에 대한 동작을 정의하는 핵심 부분입니다. 한 가지 차이점은 OnApplyTemplate scope GetTemplateChild를 사용하여 FindName이 아닌 명명된 부분을 찾아야 한다는 것입니다.
LayoutUpdated 는 관련 이벤트입니다.
LayoutUpdated 이벤트는 컨트롤을 사용하도록 설정하는 시퀀스의 마지막 "개체 수명" 이벤트이며 이후에 발생합니다Loaded
. 그러나 LayoutUpdated 는 트리의 연속 부모뿐만 아니라 레이아웃 변경과 관련된 개체에 대해 발생합니다. UI의 여러 개체가 동시에 LayoutUpdated 를 발생할 수 있습니다. 레이아웃 변경은 사용자가 보기 상태 또는 화면 해상도를 변경하거나 동일한 UI 또는 레이아웃 컨테이너에 있는 다른 요소의 프로그래밍 방식 크기 조정과 같은 다양한 이유로 발생합니다. 이러한 이유로 Loaded
은 일반적으로 초기 레이아웃 또는 적용된 템플릿에서 작동하는 코드를 실행하는 데 더 적합합니다.
페이지 간 탐색을 사용하는 앱 코드의 경우 대상 페이지에서 요소 조작 또는 컨트롤의 상태 변경 에 Page.OnNavigatedTo 를 사용하지 마세요. 이 가상 메서드는 템플릿이 로드되기 전에 호출되므로 템플릿의 요소를 아직 사용할 수 없습니다. 대신 새로 로드된 페이지 콘텐츠의 루트에 이벤트 처리기를 연결 Loaded
하고 이벤트 처리기에서 Loaded
요소 조작, 상태 변경, 이벤트 배선 등을 수행합니다.