FrameworkElement.Loaded Evento
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Si verifica quando un FrameworkElement è stato costruito e aggiunto all'albero degli oggetti ed è pronto per l'interazione.
// 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 evento
Esempio
I gestori per il caricamento e il caricamento vengono collegati automaticamente a qualsiasi pagina che usa la classe NavigationHelper dai modelli di progetto per il supporto. Il cablaggio dell'evento viene eseguito nel costruttore. Il gestore viene scritto usando un oggetto lambda e associa altri gestori eventi in modo che lo spostamento di pagina possa usare eventi del mouse o della tastiera.
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;
}
};
L'evento Caricato è un buon momento per avviare animazioni decorative che non sono associate ad animazioni tema o altri trigger. In questo esempio viene illustrato l'attivazione di un pointAnimation in XAML tramite il collegamento di un gestore caricato a un metodo che chiama Begin in uno Storyboard di animazione.
<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
Commenti
Anche se questo evento usa il delegato RoutedEventHandler e RoutedEventArgs come dati dell'evento, l'evento non è un evento indirizzato. Può essere gestito solo sull'elemento che ha origine l'evento (in altre parole, il mittente). OriginalSource nei dati dell'evento per questo evento è sempre Null.
Durata dell'oggetto e caricati
Nell'implementazione di Windows Runtime, l'evento caricato viene garantito dopo l'applicazione di un modello di controllo e è possibile ottenere riferimenti agli oggetti creati applicando il modello XAML.
L'evento Loaded può essere usato come punto per associare i gestori eventi agli elementi provenienti da un modello o per richiamare la logica basata sull'esistenza di elementi figlio che sono il risultato di un modello applicato. Loaded è l'evento di durata dell'oggetto preferito per modificare le strutture dell'albero degli elementi con il codice dell'app prima della visualizzazione dei controlli XAML per l'interfaccia utente. È anche appropriato chiamare il metodo VisualStateManager.GoToState da un gestore caricato per impostare uno stato di visualizzazione iniziale definito nel modello, se non è presente alcun altro evento che si verifica anche nel layout iniziale(SizeChanged si verifica sul layout iniziale).
La tempistica del caricamento nell'implementazione Windows Runtime è simile alla relativa tempistica nell'implementazione Windows Presentation Foundation (WPF). Al contrario, l'implementazione di Microsoft Silverlight presenta un problema di intervallo in cui non è possibile basarsi sul modello caricato quando si è verificato il caricamento. Se si esegue la migrazione di XAML o code-behind da questi framework XAML, è possibile modificare le operazioni eseguite in un gestore caricato in modo che sia appropriato per il tempo di caricamento del modello dell'implementazione Windows Runtime.
Per accedere agli elementi provenienti da un modello applicato, è possibile usare i metodi statici di VisualTreeHelper e esplorare gli elementi figlio in base all'indice. In alternativa, è possibile chiamare il metodo FindName nell'elemento radice del contenuto modello per trovare una parte specifica del modello con un determinato valore di attributo x:Name . Si noti che è necessario chiamare FindName nella radice del modello anziché il controllo stesso, perché è presente un nomescope XAML creato qualsiasi volta che gli oggetti vengono creati da un modello specifico per tale modello (per altre informazioni, vedere Nomi XAML). Per passare alla radice del modello, usare VisualTreeHelper.GetChild(target,0)
dove target
è l'oggetto in cui viene applicato il modello. Dopo aver ottenuto tale radice, è possibile accedere alle parti denominate in seguito.
Se si deriva da un controllo esistente, anziché gestire Caricati in base a ogni istanza, è possibile eseguire l'override di OnApplyTemplate per rendere il comportamento parte del comportamento della classe predefinita. OnApplyTemplate è specificamente destinato al callback per questa situazione, in cui è presente un albero di oggetti dal modello applicato e ora si vuole esaminare o regolare gli oggetti visivi. Si tratta di una parte fondamentale della definizione del comportamento per un controllo personalizzato, incluse le azioni, ad esempio dichiarando gli stati visivi iniziali e i gestori di classi di cablaggio che non possono essere definiti usando il modello di override dell'eventoOn. Una differenza è che dall'ambito OnApplyTemplate è consigliabile usare GetTemplateChild per trovare parti denominate anziché FindName.
LayoutUpdated è un evento correlato. L'evento LayoutUpdated è l'ultimo evento "durata dell'oggetto" nella sequenza di abilitazione di un controllo e si verifica dopo il caricamento. Tuttavia, LayoutUpdated viene attivato per gli oggetti coinvolti in una modifica del layout, non solo i genitori successivi nell'albero. Diversi oggetti in un'interfaccia utente potrebbero essere tutti attivati LayoutUpdated contemporaneamente. Le modifiche di layout si verificano per diversi motivi, ad esempio l'utente che modifica lo stato di visualizzazione o la risoluzione dello schermo o il ridimensionamento a livello di codice di altri elementi nello stesso contenitore di interfaccia utente o layout. Per questo motivo, Loaded è in genere una scelta migliore per l'esecuzione del codice che funziona con un layout iniziale o un modello applicato.
Per il codice dell'app che usa lo spostamento tra le pagine, non usare Page.OnNavigatedTo per la modifica degli elementi o la modifica dello stato dei controlli nella pagina di destinazione. Il metodo virtuale OnNavigatedTo viene richiamato prima del caricamento del modello, pertanto gli elementi dei modelli non sono ancora disponibili. Allegare invece un gestore eventi caricato alla radice del contenuto della pagina appena caricato ed eseguire eventuali manipolazioni degli elementi, modifiche dello stato, cablaggio eventi e così via nel gestore eventi caricato.