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, , ContentElementFrameworkElementet FrameworkContentElement. La DependencyObject classe est également liée, car il s’agit d’une classe de base commune des deux UIElement et ContentElement

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

Les deux UIElement et ContentElement sont dérivés de DependencyObject, par 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 l’objectif qu’ils servent dans une application. UIElement a Visual également dans sa hiérarchie de classes, qui est une classe qui expose la prise en charge graphique de niveau inférieur sous-jacent à Windows Presentation Foundation (WPF). Visual fournit une infrastructure de rendu en définissant des régions d’écran rectangulaires indépendantes. En pratique, UIElement il s’agit d’éléments qui prennent en charge un modèle objet plus grand, qui 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 con mode tente l est délibérément plus ouvert, pour permettre différentes combinaisons d’éléments. ContentElement ne dérive pas de Visual; son modèle est qu’il ContentElement serait consommé par quelque chose d’autre, tel qu’un lecteur ou une visionneuse qui interpréterait ensuite les éléments et produire l’intégralité Visual de Windows Presentation Foundation (WPF) à consommer. Certaines UIElement classes sont destinées à être des hôtes de contenu : elles fournissent l’hébergement et le rendu pour une ou plusieurs ContentElement classes (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.

Niveau de framework et niveau principal

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 de framework WPF représente une solution plus complète pour les besoins d’application de base, y compris l’implémentation du gestionnaire de présentation pour les présentations. Le niveau principal WPF permet d’utiliser une grande partie de WPF sans prendre la surcharge 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.

Choisir de quel é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 fournies avec trois des plus importantes classes d’élément pour vous aider à décider de quelle 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ôles ou au moins de la Control classe de base. 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 mais que vous avez besoin de dériver d’une classe plus haute dans la hiérarchie, les sections suivantes sont prévues pour vous servir de guide des 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 :

  • GetValue et prise en charge, et SetValue 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 des styles et des tables de montage séquentiel. 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 Ressources XAML.

  • 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 framework, comme la liaison de données, les styles ou l’implémentation du framework de disposition. Pour plus d’informations, consultez Métadonnées de propriété de framework.

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

  • Prise en charge de l’implémentation pratique au niveau du framework WPF du système de disposition, y compris un OnPropertyChanged remplacement qui peut détecter les modifications apportées aux propriétés qui influencent 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 des styles et des tables de montage séquentiel. 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 Ressources XAML.

  • 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 framework, comme la liaison de données, les styles ou l’implémentation du framework de disposition. Pour plus d’informations, consultez Métadonnées de propriété de framework.

  • Vous n’héritez pas de l’accès aux modifications du système de disposition (par ArrangeOverrideexemple). Les implémentations du système de disposition sont disponibles uniquement sur FrameworkElement. Toutefois, vous héritez d’un OnPropertyChanged remplacement qui peut détecter les modifications apportées aux propriétés qui influencent la disposition et les signaler à tous les hôtes de contenu.

Les modèles de contenu sont documentés pour diverses classes. Le modèle de contenu pour une classe est l’un des facteurs dont vous devez tenir compte si vous souhaitez rechercher une classe appropriée à partir de laquelle 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 DispatcherObject pour obtenir la prise en charge de ce modèle de threading. Pour plus d’informations, consultez Modèle de thread.

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 événement se produit dans d’autres classes (il n’est pas autonome), mais la Visual classe fournit un type connu utilisé par les processus de rendu à différents niveaux. Visual implémente les tests de positionnement, mais il n’expose pas les événements qui signalent des positifs de test de positionnement (ceux-ci sont en UIElement). Pour plus d’informations, consultez Programmation de la couche visuelle.

Freezable

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 Freezable type fournit une base commune pour certains éléments graphiques tels que les géométries et les pinceaux, ainsi que les animations. Notamment, un n’est pas un FreezableVisual; il peut contenir des propriétés qui deviennent des sous-propriétés lorsque l’application Freezable est appliquée 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 Freezable.

Animatable

Animatable est une Freezable classe dérivée 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ôler

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 qui Control permet est la création de modèles de contrôle.

Voir aussi