Windows Dev Center

FrameworkElement.Loaded Event

Tritt auf, wenn ein FrameworkElement erstellt und der Objektstruktur hinzugefügt wurde und bereit zur Interaktion ist.

Syntax


public event RoutedEventHandler Loaded


<frameworkElement Loaded="eventhandler"/>
 

Ereignisinformationen

Delegat RoutedEventHandler

Hinweise

Obwohl dieses Ereignis den RoutedEventHandler-Delegaten und RoutedEventArgs als Ereignisdaten verwendet, ist das Ereignis kein Routingereignis. Eine Behandlung ist nur durch das Element möglich, von dem das Ereignis ausgeht, also dem Sender. OriginalSource in Ereignisdaten für dieses Ereignis ist immer NULL.

Loaded-Ereignis und Objektlebensdauer

Die Windows Runtime-Implementierung garantiert das Auftreten des Ereignisses Loaded nach Anwendung einer Steuerelementvorlage, und Sie können Verweise auf Objekte abrufen, die durch die Anwendung der XAML-Vorlage erstellt wurden. Diese Tatsache wurde nicht ordnungsgemäß in den vorherigen Versionen der Dokumentation erfasst.

Das Loaded-Ereignis kann als Punkt verwendet werden, um die Ereignishandler für Elemente zu verknüpfen, die von einer Vorlage stammen, oder um eine Logik aufzurufen, die auf dem Vorhandensein von untergeordneten Elementen beruht, die das Ergebnis einer angewendeten Vorlage sind. Loaded ist das bevorzugte Objektlebensdauerereignis zur Manipulation von Elementbaumstrukturen mit App-Code vor der Anzeige von XAML-Steuerelementen. Es ist auch zweckmäßig, die VisualStateManager.GoToState-Methode aus einem Loaded-Handler aufzurufen, um einen anfänglichen Ansichtszustand festzulegen, der in der Vorlage definiert ist.

Die zeitliche Steuerung von Loaded in der Windows-Runtime-Implementierung ähnelt der zeitlichen Steuerung in der WPF-Implementierung (Windows Presentation Foundation). Dagegen hat die Implementierung von Microsoft Silverlight ein Zeitproblem, sodass Sie nicht darauf vertrauen können, dass die Vorlage beim Eintritt des Loaded-Ereignisses geladen ist. Wenn Sie von diesen XAML-Frameworks XAML oder CodeBehind migrieren, möchten Sie möglicherweise in einem Loaded-Handler diesen Arbeitsschritt mit der durch die Windows-Runtime-Implementierung vorgenommenen Zeitsteuerung für das Laden der Vorlage abgleichen.

Um auf die Elemente zuzugreifen, die aus einer angewendeten Vorlage stammen, können Sie die statischen Methoden der VisualTreeHelper-Klasse verwenden und nach Index durch untergeordnete Elemente navigieren. Oder Sie rufen die FindName-Methode für das Stammelement des Vorlageninhalts auf, um einen bestimmten Teil der Vorlage mit einem gegebenen x:Name-Wert abzurufen. Beachten Sie, dass Sie den FindName im Vorlagenstamm aufrufen müssen und nicht das Steuerelement selbst, weil jedes Mal ein XAML-Namescope erstellt wird, wenn Objekte durch eine spezielle Vorlage erstellt werden (weitere Informationen finden Sie unter XAML-Namescopes). Um den Vorlagenstamm abzurufen, verwenden Sie VisualTreeHelper.GetChild(target,0), wo target das Objekt ist, auf das die Vorlage angewendet wird.

Wenn Sie von einem vorhandenen Steuerelement ableiten, anstatt Loaded auf Instanzbasis auszuführen, können Sie OnApplyTemplate überschreiben, um das Verhalten als Teil des Standardklassenverhaltens zu definieren. OnApplyTemplate ist ausdrücklich als Rückruf für diese Situation vorgesehen, in der eine Objektstruktur aus der angewendeten Vorlage vorliegt und Sie die grafischen Elemente untersuchen oder anpassen möchten. Dies ist eine wichtige Komponente beim Definieren des Verhaltens für ein benutzerdefiniertes Steuerelement, einschließlich Aktionen wie beispielsweise das Festlegen der visuellen Anfangszustände und Verknüpfen von Klassenhandlern, die nicht mithilfe des On*-Überschreibungsmusters definiert werden können.

LayoutUpdated ist ein zugehöriges Ereignis. Das LayoutUpdated-Ereignis ist das letzte "object lifetime"-Ereignis in der Sequenz zur Aktivierung eines Steuerelements und tritt nach Loaded ein. LayoutUpdated wird jedoch für Objekte ausgelöst, die an einer Layoutänderung beteiligt sind, nicht nur für aufeinander folgende übergeordnete Elemente in der Struktur. Einige Objekte in einer Benutzeroberfläche können alle LayoutUpdated gleichzeitig auslösen. Layoutänderungen erfolgen aus einer Vielzahl von Gründen, etwa weil der Benutzer den Ansichtszustand oder die Bildschirmauflösung ändert oder weil im selben Layoutcontainer oder der Benutzeroberfläche programmgesteuert geändert werden. Aus diesem Grund ist Loaded normalerweise eine bessere Wahl zum Ausführen von Code, der mit einem ursprünglichen Layout oder einer angewendeten Vorlage arbeitet.

Für App-Code, der eine Navigation zwischen Seiten verwendet, verwenden Sie nicht Page.OnNavigatedTo für die Elementmanipulation oder Zustandsänderung von Steuerelementen auf der Zielseite. Die virtuelle Methode OnNavigatedTo wird aufgerufen, bevor die Vorlage geladen wird, so sind Elemente aus Vorlagen noch nicht verfügbar. Fügen Sie stattdessen einen Loaded-Ereignishandler an der Wurzel des Inhalts der neu geladenen Seite an und führen Sie anschließend alle Manipulationen, Statusänderungen, Ereignisübergaben usw. im Loaded-Ereignishandler aus.

Beispiele

Handler für Loaded und Unloaded werden automatisch auf jeder Seite angefügt, die die allgemeine Codevorlage LayoutAwarePage verwendet. Die Ereignisverknüpfung wird im LayoutAwarePage-Konstruktor ausgeführt. Der Handler ruft Hilfsprogrammmethoden auf, die den Ansichtszustand beibehalten, und fügt weitere Ereignishandler an, damit die Seitennavigation Mausereignisse und Tastaturereignisse verwenden kann.


this.Loaded += (sender, e) =>
{
    this.StartLayoutUpdates(sender, e);

    // Keyboard and mouse navigation only apply when occupying the entire window
    if (this.ActualHeight == Window.Current.Bounds.Height &&
        this.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;
    }
};


Das Loaded-Ereignis ist ein guter Zeitpunkt, um dekorative Animationen zu starten, die nicht an Designanimationen oder andere Auslöser gebunden sind. In diesem Beispiel wird das Auslösen von PointAnimation in XAML dargestellt, indem ein Loaded-Handler an eine Methode verknüpft wird, die Begin für ein animiertes Storyboard aufruft.


<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
private void Start_Animation(object sender, RoutedEventArgs e)
{
    myStoryboard.Begin();
}


Anforderungen

Mindestens unterstützter Client

Windows 8

Mindestens unterstützter Server

Windows Server 2012

Namespace

Windows.UI.Xaml
Windows::UI::Xaml [C++]

Metadaten

Windows.winmd

Siehe auch

FrameworkElement
OnApplyTemplate
VisualTreeHelper
Control.Template
Übersicht über Ereignisse und Routingereignisse.
Schnellstart: Steuerelementvorlagen

 

 

Anzeigen:
© 2015 Microsoft