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 collega 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 legate a animazioni a tema o ad altri trigger. Questo esempio mostra l'attivazione di un pointAnimation in XAML, associando un Loaded gestore 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();
}
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 caricata
Nell'implementazione SDK per app di Windows, 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 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 nel layout iniziale.
La tempistica di nell'implementazione SDK per app di Windows Loaded è simile alla tempistica nell'implementazione Windows Presentation Foundation (macchine virtuali Windows). Al contrario, l'implementazione di Microsoft Silverlight presentava un problema di temporizzazione in cui non era possibile fare affidamento 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 i tempi di caricamento del modello dell'implementazione SDK per app di Windows.
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 . Si noti che è necessario chiamare FindName nella radice del modello anziché il controllo stesso, perché è presente 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 successivamente.
Se si deriva da un controllo esistente, invece di gestire Loaded in base a ogni istanza, è possibile eseguire l'override di OnApplyTemplate per fare parte del comportamento della classe predefinita.
OnApplyTemplate è destinato in modo specifico al callback per questa situazione, in cui è presente un albero di oggetti dal modello applicato e ora si desidera esaminare o modificare 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 di classi 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 "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 i genitori successivi nell'albero. Diversi oggetti in un'interfaccia utente potrebbero generare tutti LayoutUpdated contemporaneamente. Le modifiche al layout vengono apportate 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. Collegare invece un Loaded gestore eventi alla radice del contenuto della pagina appena caricata ed eseguire qualsiasi modifica degli elementi, modifiche dello stato, collegamento di eventi e così via nel Loaded gestore eventi.