Поделиться через


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"/>
 

Тип события

Примеры

Обработчики для загруженных и выгруженных автоматически присоединяются к любой странице, которая использует класс 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();
}
' 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 можно использовать в качестве точки для подключения обработчиков событий к элементам, которые поступают из шаблона, или для вызова логики, которая зависит от существования дочерних элементов, которые являются результатом примененного шаблона. Loaded — это предпочтительное событие времени существования объекта для управления структурами дерева элементов с помощью кода приложения перед отображением элементов управления XAML для пользовательского интерфейса. Кроме того, можно вызвать метод VisualStateManager.GoToState из обработчика Loaded, чтобы задать начальное состояние представления, определенное в шаблоне, если в исходном макете не возникает другого события (SizeChanged происходит в исходном макете).

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

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

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

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

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

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

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