Événements de la durée de vie d’un objet
Cette rubrique décrit les événements WPF spécifiques qui signent des étapes dans une durée de vie d’objet de création, d’utilisation et de destruction.
Prérequis
Cette rubrique part du principe que vous comprenez les propriétés de dépendance du point de vue d’un consommateur de propriétés de dépendance existantes sur les classes WPF (Windows Presentation Foundation) et que vous avez lu la rubrique Vue d’ensemble des propriétés de dépendance. Pour suivre les exemples de cette rubrique, vous devez également comprendre XAML (voir XAML dans WPF) et savoir comment écrire des applications WPF.
Événements de la durée de vie d’un objet
Tous les objets du code managé Microsoft .NET Framework passent par un ensemble similaire de phases de vie, de création, d’utilisation et de destruction. De nombreux objets passent aussi par une étape de fin de vie qui se produit pendant la phase de destruction. Les objets WPF, plus précisément les objets visuels que WPF identifie en tant qu’éléments, ont également un ensemble d’étapes courantes de la vie des objets. Les modèles de programmation et d’application WPF exposent ces étapes sous la forme d’une série d’événements. Il existe quatre types principaux d’objets dans WPF en ce qui concerne les événements de durée de vie ; éléments en général, éléments de fenêtre, hôtes de navigation et objets d’application. Les fenêtres et les hôtes de navigation appartiennent aussi au groupe d’objets visuels (éléments) le plus grand. Cette rubrique décrit les événements de durée de vie communs à tous les éléments et présente les événements plus spécifiques qui s’appliquent aux définitions d’application, fenêtres ou hôtes de navigation.
Événements de durée de vie communs des éléments
Tout élément au niveau du framework WPF (ces objets dérivés de l’un ou l’autreFrameworkElement) a trois événements de durée de vie courants : Initialized, Loadedet Unloaded.FrameworkContentElement
Initialisées
Initialized est déclenché en premier, et correspond approximativement à l’initialisation de l’objet par l’appel à son constructeur. Comme l’événement se produit en réponse à l’initialisation, vous êtes assuré que toutes les propriétés de l’objet sont définies. (Une exception est les utilisations d’expressions telles que les ressources dynamiques ou la liaison ; elles seront des expressions non évaluées.) En conséquence de l’exigence que toutes les propriétés soient définies, la séquence d’être Initialized levée par des éléments imbriqués définis dans le balisage semble se produire dans l’ordre des éléments les plus profonds de l’arborescence d’éléments, puis les éléments parents vers la racine. Cet ordre s’explique par le fait que les relations parent-enfant et contenant-contenu sont des propriétés. Par conséquent, le parent ne peut pas signaler l’initialisation tant que les éléments enfants qui remplissent la propriété ne sont pas eux aussi complètement initialisés.
Lorsque vous écrivez des gestionnaires en réponse à l’événement Initialized , vous devez considérer qu’il n’existe aucune garantie que tous les autres éléments de l’arborescence d’éléments (arborescence logique ou arborescence visuelle) autour de l’emplacement où le gestionnaire est attaché ont été créés, en particulier les éléments parents. Les variables membres peuvent avoir la valeur null ou les sources de données peuvent ne pas être encore remplies par la liaison sous-jacente (même au niveau de l’expression).
Chargé
Loaded est déclenché ensuite. L’événement Loaded est déclenché avant le rendu final, mais une fois que le système de disposition a calculé toutes les valeurs nécessaires pour le rendu. Loaded implique que l’arborescence logique contenue dans un élément est terminée et se connecte à une source de présentation qui fournit le HWND et l’aire de rendu. La liaison de données standard (liaison à des sources locales, telles que d’autres propriétés ou sources de données directement définies) s’est produite avant Loaded. La liaison de données asynchrone (sources externes ou dynamiques) peut s’être produite, mais du fait même de sa nature asynchrone, elle peut ne pas avoir eu lieu.
Le mécanisme par lequel l’événement Loaded est déclenché est différent de Initialized. L’événement Initialized est déclenché par élément, sans coordination directe par une arborescence d’éléments terminée. En revanche, l’événement Loaded est déclenché en tant qu’effort coordonné tout au long de l’arborescence d’éléments (en particulier, l’arborescence logique). Lorsque tous les éléments de l’arborescence sont dans un état où ils sont considérés comme chargés, l’événement Loaded est déclenché pour la première fois sur l’élément racine. L’événement Loaded est ensuite déclenché successivement sur chaque élément enfant.
Remarque
Ce comportement peut rappeler en apparence le tunneling dans le cas d’un événement routé. Cependant, aucune information n’est transmise d’un événement à l’autre. Chaque élément a toujours la possibilité de gérer son Loaded événement et de marquer les données d’événement comme gérées n’a aucun effet au-delà de cet élément.
Unloaded
Unloaded est déclenché en dernier et est initié par la source de présentation ou le parent visuel en cours de suppression. Lorsqu’il Unloaded est déclenché et géré, l’élément qui est le parent source d’événement (tel que déterminé par Parent la propriété) ou tout élément donné vers le haut dans les arborescences logiques ou visuelles peut déjà avoir été non défini, ce qui signifie que la liaison de données, les références de ressources et les styles peuvent ne pas être définis sur leur valeur d’exécution normale ou connue.
Éléments de modèle d’application d’événements de durée de vie
Les événements de durée de vie courants pour les éléments sont les éléments de modèle d’application suivants : Application, , Window, Page, NavigationWindowet Frame. Ces éléments étendent les événements de durée de vie communs avec des événements supplémentaires en rapport avec leur fonction. Ils sont décrits en détail aux emplacements suivants :
Application: Vue d’ensemble de la gestion des applications.
Window: Vue d’ensemble de WPF Windows.
Page, NavigationWindowet Frame: Vue d’ensemble de la navigation.
Voir aussi
.NET Desktop feedback