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 para Loaded y Unloaded se adjuntan automáticamente a cualquier página que use la clase NavigationHelper de las plantillas de proyecto para obtener compatibilidad. 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 evento Loaded 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 un PointAnimation en XAML mediante el cableado de un controlador Loaded 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();
}
' Start the animation when the object loads
Private Sub Start_Animation(ByVal sender As Object, ByVal e As EventArgs)
    myStoryboard.Begin()
End Sub

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 de evento para este evento siempre es null.

Duración de los objetos y cargados

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

El evento Loaded se puede usar como 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).

La sincronización de Loaded en la implementación de Windows Runtime es similar a su tiempo en la implementación de Windows Presentation Foundation (WPF). Por el contrario, la implementación de Microsoft Silverlight tiene un problema de tiempo en el que no se puede confiar en la plantilla que se carga cuando se ha producido la carga. Si va a migrar XAML o código subyacente desde estos marcos XAML, es posible que quiera ajustar lo que hace en un controlador cargado para que sea adecuado para el tiempo de carga de plantillas de la implementación de Windows Runtime.

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 controlar Loaded por instancia, puede invalidar OnApplyTemplate para que el comportamiento de la clase predeterminada forme parte del comportamiento. 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 de Loaded. 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 funcione 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. El método virtual OnNavigatedTo 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 controlador de eventos Loaded 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 controlador de eventos cargado.

Se aplica a

Consulte también