Compartir a través de


FrameworkElement.Loaded Evento

Definición

Se produce cuando se ha construido y agregado un FrameworkElement al árbol de objetos y está listo para la interacción.

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

Tipo de evento

Ejemplos

Los controladores de Loaded y Unloaded se adjuntan automáticamente a cualquier página que use la NavigationHelper clase de las plantillas de proyecto para admitir. El cableado de eventos se realiza en el constructor . El controlador se escribe mediante una expresión lambda y adjunta otros controladores de eventos para que la navegación de páginas pueda usar eventos de mouse o teclado.

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;
    }
};

El Loaded evento es un buen momento para iniciar animaciones decorativas que no están vinculadas a animaciones de tema u otros desencadenadores. En este ejemplo se muestra cómo desencadenar una PointAnimation en XAML mediante el cableado de un Loaded controlador a un método que llama a Begin en un guión gráfico de animación.

<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();
}

Comentarios

Aunque este evento usa el delegado RoutedEventHandler y RoutedEventArgs como datos de eventos, el evento no es un evento enrutado. Solo se puede controlar en el elemento que origina el evento (es decir, el remitente). OriginalSource en los datos del evento para este evento siempre nulles .

Duración de los objetos y cargados

En la implementación de SDK de Aplicaciones para Windows, se garantiza que el Loaded evento se produzca después de aplicar una plantilla de control, y puede obtener referencias a objetos creados mediante la aplicación de la plantilla XAML.

El Loaded evento se puede usar como un punto para enlazar controladores de eventos en elementos que proceden de una plantilla o para invocar lógica que se basa en la existencia de elementos secundarios que son el resultado de una plantilla aplicada. Loaded es el evento preferido de duración del objeto para manipular estructuras de árbol de elementos con el código de la aplicación antes de mostrar controles XAML para la interfaz de usuario. También es adecuado llamar al método VisualStateManager.GoToState desde un controlador loaded para establecer un estado de vista inicial definido en la plantilla, si no hay ningún otro evento que también se produzca en el diseño inicial (SizeChanged se produce en el diseño inicial).

El tiempo de en la implementación de Loaded SDK de Aplicaciones para Windows es similar a su tiempo en la implementación de Windows Presentation Foundation (WPF). Por el contrario, la implementación de Microsoft Silverlight tenía un problema de tiempo en el que no podía confiar en la plantilla que se cargaba cuando Loaded se producía. Si va a migrar XAML o código subyacente desde estos marcos XAML, es posible que quiera ajustar lo que hace en un Loaded controlador para que sea adecuado para el tiempo de carga de plantillas de la implementación de SDK de Aplicaciones para Windows.

Para acceder a los elementos que proceden de una plantilla aplicada, puede usar los métodos estáticos VisualTreeHelper y navegar por los elementos secundarios por índice. O bien, puede llamar al método FindName en el elemento raíz del contenido con plantilla para buscar una parte específica de la plantilla con un valor de atributo x:Name determinado. Ten en cuenta que debes llamar a FindName en la raíz de la plantilla en lugar del propio control, ya que hay un ámbito de nombres XAML creado cada vez que un objeto se crea mediante una plantilla específica de esa plantilla (para obtener más información, consulta Ámbitos de nombres XAML). Para llegar a la raíz de la plantilla, use VisualTreeHelper.GetChild(target,0) donde target es el objeto donde se aplica la plantilla. Una vez que tenga esa raíz, puede llegar a las partes con nombre a partir de entonces.

Si deriva de un control existente, en lugar de controlarlo Loaded por instancia, puede invalidar OnApplyTemplate para que forme parte del comportamiento de la clase predeterminada. OnApplyTemplate está diseñado específicamente como devolución de llamada para esta situación, donde tiene un árbol de objetos de la plantilla aplicada y ahora desea examinar o ajustar los objetos visuales. Esta es una parte clave de definir el comportamiento de un control personalizado, incluidas acciones como declarar los estados visuales iniciales y conectar controladores de clases que no se pueden definir mediante el patrón de invalidación OnEvent . Una diferencia es que desde el ámbito OnApplyTemplate debe usar GetTemplateChild para buscar elementos con nombre en lugar de FindName.

LayoutUpdated es un evento relacionado. El evento LayoutUpdated es el último evento de "duración del objeto" en la secuencia de habilitación de un control y se produce después Loadedde . Sin embargo, LayoutUpdated se desencadena para los objetos implicados en un cambio de diseño, no solo para los elementos primarios sucesivos del árbol. Varios objetos de una interfaz de usuario podrían activar LayoutUpdated al mismo tiempo. Los cambios de diseño se producen por diversos motivos, como el usuario que cambia el estado de vista o la resolución de pantalla, o el cambio de tamaño mediante programación de otros elementos en la misma interfaz de usuario o contenedor de diseño. Por este motivo, Loaded suele ser una mejor opción para ejecutar código que funciona con un diseño inicial o una plantilla aplicada.

Para el código de la aplicación que usa la navegación entre páginas, no use Page.OnNavigatedTo para la manipulación de elementos o el cambio de estado de los controles en la página de destino. Este método virtual se invoca antes de cargar la plantilla, por lo que los elementos de las plantillas aún no están disponibles. En su lugar, adjunte un Loaded controlador de eventos en la raíz del contenido de la página recién cargada y realice cualquier manipulación de elementos, cambios de estado, cableado de eventos, etc. en el Loaded controlador de eventos.

Se aplica a

Consulte también