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 Loaded
e Unloaded vengono collegati automaticamente a qualsiasi pagina che usa la NavigationHelper
classe dai modelli di progetto per il supporto. Il cablaggio degli eventi viene eseguito nel costruttore. Il gestore viene scritto usando un'espressione lambda e associa altri gestori eventi in modo che lo spostamento della 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 Loaded
è un buon momento per avviare animazioni decorative che non sono associate ad animazioni a tema o ad altri trigger. Questo esempio mostra l'attivazione di pointAnimation in XAML tramite il collegamento di un Loaded
gestore a un metodo che chiama Begin su 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();
}
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 dei caricamenti e degli oggetti
Nell'implementazione Windows App SDK, l'evento viene garantito dopo l'applicazione Loaded
di un modello di controllo e puoi 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 che si basa sull'esistenza di elementi figlio risultanti da un modello applicato. Loaded è l'evento di durata dell'oggetto preferito per la modifica delle strutture ad albero degli elementi con il codice dell'app prima della visualizzazione dei controlli XAML per l'interfaccia utente. È anche opportuno chiamare il metodo VisualStateManager.GoToState da un gestore Loaded per impostare uno stato di visualizzazione iniziale definito nel modello, se non è presente un altro evento che si verifica anche nel layout iniziale (SizeChanged si verifica sul layout iniziale).
La tempistica dell'implementazione Loaded
del Windows App SDK è simile alla tempistica nell'implementazione di Windows Presentation Foundation (WPF). Al contrario, l'implementazione di Microsoft Silverlight presentava un problema di temporizzazione in cui non era possibile basarsi sul modello caricato quando Loaded
si verificava. Se si esegue la migrazione di XAML o code-behind da questi framework XAML, è possibile modificare le operazioni eseguite in un Loaded
gestore in modo che sia appropriato per l'intervallo di caricamento del modello dell'implementazione del Windows App SDK.
Per accedere agli elementi provenienti da un modello applicato, è possibile usare i metodi statici di VisualTreeHelper e spostarsi tra gli elementi figlio in base all'indice. In alternativa, è possibile chiamare il metodo FindName sull'elemento radice del contenuto basato su modelli per trovare una parte specifica del modello con un determinato valore dell'attributo x:Name . Tieni presente che devi chiamare FindName nella radice del modello anziché nel controllo stesso, perché esiste un ambito dei nomi XAML creato ogni volta che gli oggetti vengono creati da un modello specifico per tale modello (per altre info, vedi Ambiti dei nomi XAML). Per accedere 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, invece di gestire Loaded
in base a ogni istanza, è possibile eseguire l'override di OnApplyTemplate per rendere il comportamento della classe predefinita parte del comportamento della classe.
OnApplyTemplate è progettato in modo specifico come callback per questa situazione, in cui è presente un albero di oggetti dal modello applicato e ora si vogliono esaminare o regolare gli oggetti visivi. Si tratta di una parte fondamentale della definizione del comportamento per un controllo personalizzato, incluse azioni come la dichiarazione degli stati di visualizzazione iniziale e i gestori della classe di collegamento 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 di durata dell'oggetto nella sequenza di abilitazione di un controllo e si verifica dopo Loaded
. Tuttavia, LayoutUpdated viene generato per gli oggetti coinvolti in una modifica del layout, non solo per gli elementi padre successivi nell'albero. Diversi oggetti in un'interfaccia utente potrebbero generare tutti LayoutUpdated contemporaneamente. Le modifiche al 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 di 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. Questo metodo virtuale viene richiamato prima del caricamento del modello, pertanto gli elementi dei modelli non sono ancora disponibili. Allegare invece un Loaded
gestore eventi alla radice del contenuto della pagina appena caricata ed eseguire eventuali modifiche degli elementi, modifiche dello stato, cablaggio degli eventi e così via nel Loaded
gestore eventi.