Partager via


Vue d’ensemble des éléments de base

Un pourcentage élevé de classes dans Windows Presentation Foundation (WPF) est dérivé de quatre classes couramment appelées dans la documentation du KIT de développement logiciel (SDK) en tant que classes d’éléments de base. Ces classes sont UIElement, FrameworkElement, ContentElementet FrameworkContentElement. La classe DependencyObject est également liée, car il s’agit d’une classe de base commune de UIElement et de ContentElement

API d’élément de base dans les classes WPF

Les UIElement et les ContentElement sont dérivés de DependencyObject, à travers des voies quelque peu différentes. Le fractionnement à ce niveau traite de la façon dont un UIElement ou ContentElement sont utilisés dans une interface utilisateur et à quel objectif ils servent dans une application. UIElement a également Visual dans sa hiérarchie de classes, qui est une classe qui expose la prise en charge graphique de bas niveau sous-jacente à Windows Presentation Foundation (WPF). Visual fournit une infrastructure de rendu en définissant des régions d’écran rectangulaires indépendantes. Dans la pratique, UIElement concerne les éléments qui prennent en charge un modèle objet plus grand, sont destinés à rendre et à mettre en page dans des régions qui peuvent être décrites comme des régions d’écran rectangulaires et où le modèle de contenu est délibérément plus ouvert, afin d’autoriser différentes combinaisons d’éléments. ContentElement ne dérive pas de Visual; son modèle est qu'un ContentElement serait consommé par quelque chose d'autre, tel qu'un lecteur ou une visionneuse qui interpréterait ensuite les éléments et produirait un Visual complet pour être consommé par Windows Presentation Foundation (WPF). Certaines classes UIElement sont destinées à être des hôtes de contenu : elles fournissent l’hébergement et le rendu pour une ou plusieurs classes ContentElement (DocumentViewer est un exemple de cette classe). ContentElement est utilisé comme classe de base pour les éléments avec des modèles objet un peu plus petits et qui traitent davantage le texte, les informations ou le contenu du document qui peut être hébergé dans un UIElement.

Framework-Level et Core-Level

UIElement sert de classe de base pour FrameworkElement, et ContentElement sert de classe de base pour FrameworkContentElement. La raison de ce prochain niveau de classes est de prendre en charge un niveau principal WPF distinct d’un niveau de framework WPF, avec cette division également existante dans la façon dont les API sont divisées entre les assemblys PresentationCore et PresentationFramework. Le niveau du framework WPF présente une solution plus complète pour les besoins d’application de base, notamment l’implémentation du gestionnaire de disposition pour la présentation. Le niveau principal WPF offre un moyen d’utiliser la majeure partie de WPF sans utiliser le traitement de l’assembly supplémentaire. La distinction entre ces niveaux est très rarement importante pour la plupart des scénarios de développement d’applications classiques, et en général, vous devez considérer les API WPF dans son ensemble et ne pas vous préoccuper de la différence entre le niveau du framework WPF et le niveau principal WPF. Vous devrez peut-être connaître les distinctions de niveau si la conception de votre application choisit de remplacer des quantités substantielles de fonctionnalités de niveau framework WPF, par exemple si votre solution globale possède déjà ses propres implémentations de composition et de disposition d’interface utilisateur.

Choix de l’élément à dériver

La façon la plus pratique de créer une classe personnalisée qui étend WPF consiste à dériver de l’une des classes WPF où vous obtenez autant que possible de vos fonctionnalités souhaitées via la hiérarchie de classes existante. Cette section répertorie les fonctionnalités qui sont proposées avec trois des classes d’éléments les plus importantes pour vous aider à décider de la classe à hériter.

Si vous implémentez un contrôle, qui est vraiment l’une des raisons les plus courantes de dériver d’une classe WPF, vous souhaitez probablement dériver d’une classe qui est un contrôle pratique, une classe de base de famille de contrôle ou au moins de la classe de base Control. Pour obtenir de l’aide et des exemples pratiques, consultez Vue d’ensemble de la création de contrôles.

Si vous ne créez pas de contrôle et que vous devez dériver d’une classe supérieure dans la hiérarchie, les sections suivantes sont destinées à guider les caractéristiques définies dans chaque classe d’élément de base.

Si vous créez une classe qui dérive de DependencyObject, vous héritez des fonctionnalités suivantes :

  • Prise en charge de GetValue et SetValue, ainsi que prise en charge générale du système de propriétés.

  • Capacité d’utiliser les propriétés de dépendance et les propriétés jointes implémentées comme propriétés de dépendance.

Si vous créez une classe qui dérive de UIElement, vous héritez des fonctionnalités suivantes en plus de celles fournies par DependencyObject:

Si vous créez une classe qui dérive de FrameworkElement, vous héritez des fonctionnalités suivantes en plus de celles fournies par UIElement:

  • Prise en charge de la mise en forme et des storyboards. Pour plus d’informations, consultez Style et Vue d’ensemble des storyboards.

  • Prise en charge de la liaison de données. Pour plus d’informations, consultez Vue d’ensemble de la liaison de données.

  • Prise en charge des références de ressource dynamique. Pour plus d'informations, consultez XAML Resources.

  • Prise en charge de l’héritage de la valeur de propriété, et d’autres indicateurs dans les métadonnées qui aident à faire part des conditions traitant des propriétés aux services de l’infrastructure, comme la liaison de données, les styles ou l’implémentation de l’infrastructure de disposition. Pour plus d’informations, consultez framework Property Metadata.

  • Concept de l’arborescence logique. Pour plus d’informations, consultez Arborescences dans WPF.

  • Prise en charge pour l’implémentation pratique du système de disposition au niveau de l’infrastructure WPF, notamment un remplacement OnPropertyChanged pouvant détecter des changements de propriétés qui influent sur la disposition.

Si vous créez une classe qui dérive de ContentElement, vous héritez des fonctionnalités suivantes en plus de celles fournies par DependencyObject:

Si vous créez une classe qui dérive de FrameworkContentElement, vous obtenez les fonctionnalités suivantes en plus de celles fournies par ContentElement:

  • Prise en charge de la mise en forme et des storyboards. Pour plus d’informations, consultez Style et Vue d’ensemble de l’animation.

  • Prise en charge de la liaison de données. Pour plus d’informations, consultez Vue d’ensemble de la liaison de données.

  • Prise en charge des références de ressource dynamique. Pour plus d'informations, consultez XAML Resources.

  • Prise en charge de l’héritage de la valeur de propriété, et d’autres indicateurs dans les métadonnées qui aident à faire part des conditions traitant des propriétés aux services de l’infrastructure, comme la liaison de données, les styles ou l’implémentation de l’infrastructure de disposition. Pour plus d’informations, consultez framework Property Metadata.

  • Vous n’héritez pas de l’accès aux modifications du système de disposition (par exemple, ArrangeOverride). Les implémentations du système de disposition ne sont disponibles que sur FrameworkElement. Toutefois, vous héritez d’un remplacement OnPropertyChanged pouvant détecter des changements de propriétés qui influent sur la disposition et les signaler aux hôtes de contenu.

Les modèles de contenu sont documentés pour diverses classes. Le modèle de contenu d’une classe est un facteur possible à prendre en compte si vous souhaitez trouver une classe appropriée à dériver. Pour plus d’informations, consultez Modèle de contenu WPF.

Autres classes de base

DispatcherObject

DispatcherObject prend en charge le modèle de thread WPF et permet à tous les objets créés pour les applications WPF d’être associés à un Dispatcher. Même si vous ne dérivez pas de UIElement, DependencyObjectou Visual, vous devez envisager de dériver de DispatcherObject afin d’obtenir la prise en charge de ce modèle de threading. Pour plus d’informations, consultez Modèle de thread.

Élément visuel

Visual implémente le concept d’un objet 2D qui nécessite généralement une présentation visuelle dans une région approximativement rectangulaire. Le rendu réel d’un Visual se produit dans d’autres classes (il n’est pas autonome), mais la classe Visual fournit un type connu utilisé par les processus de rendu à différents niveaux. Visual implémente le test d’atteinte, mais il n’expose pas les événements qui signalent les résultats positifs du test d’atteinte (qui sont dans UIElement). Pour plus d’informations, consultez Programmation de la couche visuelle.

Congelable

Freezable simule l’immuabilité dans un objet mutable en fournissant les moyens de générer des copies de l’objet lorsqu’un objet immuable est requis ou souhaité pour des raisons de performances. Le type Freezable fournit une base commune pour certains éléments graphiques tels que les géométries et les pinceaux, ainsi que les animations. Notamment, un Freezable n’est pas un Visual; il peut contenir des propriétés qui deviennent des sous-propriétés lorsque l'Freezable est appliqué pour remplir une valeur de propriété d’un autre objet, et ces sous-propriétés peuvent affecter le rendu. Pour plus d’informations, consultez Vue d’ensemble des objets gelables.

Animatable

Animatable est une classe dérivée Freezable qui ajoute spécifiquement la couche de contrôle d’animation et certains membres utilitaires afin que les propriétés actuellement animées puissent être distinguées des propriétés non animées.

Contrôle

Control est la classe de base prévue pour le type d’objet appelé divers contrôles ou composants, selon la technologie. En général, les classes de contrôle WPF sont des classes qui représentent directement un contrôle d’interface utilisateur ou participent étroitement à la composition du contrôle. La fonctionnalité principale que Control active est la modélisation de contrôle.

Voir aussi