FrameworkElement.Loaded Событие

Определение

Происходит, когда элемент 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 и Unloaded автоматически присоединяются к любой странице, которая использует 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 событие является хорошим временем для запуска декоративных анимаций, которые не привязаны к анимации темы или другим триггерам. В этом примере показан запуск PointAnimation в XAML путем подключения Loaded обработчика к методу, который вызывает Begin в раскадровки анимации.

<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имеет значение .

Загружено и время существования объекта

В реализации Loaded Windows App SDK событие гарантированно произойдет после применения шаблона элемента управления, и вы можете получить ссылки на объекты, созданные путем применения шаблона XAML.

Событие Loaded можно использовать в качестве точки для подключения обработчиков событий к элементам, которые поступают из шаблона, или для вызова логики, которая зависит от существования дочерних элементов, которые являются результатом примененного шаблона. Loaded — это предпочтительное событие времени существования объекта для управления структурами дерева элементов с помощью кода приложения перед отображением элементов управления XAML для пользовательского интерфейса. Кроме того, можно вызвать метод VisualStateManager.GoToState из обработчика Loaded, чтобы задать начальное состояние представления, определенное в шаблоне, если в исходном макете не возникает другого события (SizeChanged происходит в исходном макете).

Loaded Время выполнения в реализации Windows App SDK аналогично времени в реализации Windows Presentation Foundation (WPF). В отличие от этого, в реализации Microsoft Silverlight возникла проблема со временем, из-за которой вы не могли полагаться на загрузку Loaded шаблона при возникновении. При переносе XAML или кода программной части из этих платформ XAML может потребоваться настроить действия в Loaded обработчике, чтобы они соответствовали времени загрузки шаблона для реализации Windows App SDK.

Для доступа к элементам, которые поступают из примененного шаблона, можно использовать статические методы VisualTreeHelper и перемещаться по дочерним элементам по индексу. Или можно вызвать метод FindName в корневом элементе шаблона содержимого, чтобы найти определенную часть шаблона с заданным значением атрибута x:Name . Обратите внимание, что необходимо вызывать FindName в корневом каталоге шаблона, а не в самом элементе управления, так как область имен XAML создается каждый раз, когда объекты создаются шаблоном, характерным для этого шаблона (дополнительные сведения см. в разделе Области имен XAML). Чтобы получить корень шаблона, используйте VisualTreeHelper.GetChild(target,0) , где target — это объект, к которому применяется шаблон. Получив этот корень, вы можете получить именованные части после этого.

Если вы наследуете от существующего элемента управления, вместо обработки Loaded для каждого экземпляра можно переопределить OnApplyTemplate , чтобы сделать поведение частью поведения класса по умолчанию. OnApplyTemplate специально предназначен в качестве обратного вызова для этой ситуации, когда у вас есть дерево объектов из примененного шаблона и теперь вы хотите проверить или настроить визуальные элементы. Это ключевая часть определения поведения для пользовательского элемента управления, включая такие действия, как объявление начальных визуальных состояний и подключение обработчиков классов, которые нельзя определить с помощью шаблона переопределения onevent . Одно из отличий заключается в том, что из область OnApplyTemplate вы должны использовать GetTemplateChild для поиска именованных частей, а не FindName.

LayoutUpdated — это связанное событие. Событие LayoutUpdated является последним событием времени существования объекта в последовательности включения элемента управления и происходит после Loaded. Однако LayoutUpdated активируется для объектов, участвующих в изменении макета, а не только для последовательных родителей в дереве. Несколько объектов в пользовательском интерфейсе могут одновременно запускать LayoutUpdated . Изменения макета происходят по ряду причин, таких как изменение пользователем состояния представления или разрешения экрана или программное изменение размера других элементов в том же пользовательском интерфейсе или контейнере макета. По этой причине, как правило, лучше подходит для выполнения кода, Loaded который работает с первоначальным макетом или примененным шаблоном.

Для кода приложения, использующего навигацию между страницами, не используйте Page.OnNavigatedTo для управления элементами или изменения состояния элементов управления на конечной странице. Этот виртуальный метод вызывается перед загрузкой шаблона, поэтому элементы из шаблонов пока недоступны. Вместо этого подключите Loaded обработчик событий к корню недавно загруженного содержимого страницы и выполните в обработчике Loaded событий любые манипуляции с элементами, изменения состояния, подключение событий и т. д.

Применяется к

См. также раздел