Partager via


Métadonnées de propriété d'infrastructure

Mise à jour : novembre 2007

Des options de métadonnées de propriété d'infrastructure sont signalées pour les propriétés d'éléments objet considérés au niveau de l'infrastructure WPF dans l'architecture Windows Presentation Foundation (WPF). En général, la désignation niveau d'infrastructure WPF implique la gestion de fonctionnalités telles que le rendu, la liaison de données et les ajustements du système de propriétés par les API de présentation et les fichiers exécutables de WPF. Les métadonnées de propriété d'infrastructure sont interrogées par ces systèmes afin d'identifier les caractéristiques spécifiques aux fonctionnalités de propriétés d'élément particuliers.

Cette rubrique comprend les sections suivantes.

  • Composants requis
  • Informations communiquées par les métadonnées de propriété d'infrastructure
  • Lecture de FrameworkPropertyMetadata
  • Spécification des métadonnées
  • Comportement de fusion des métadonnées de propriété d'infrastructure
  • Rubriques connexes

Composants 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 Windows Presentation Foundation (WPF) et que vous avez lu Vue d'ensemble des propriétés de dépendance. Vous devez également avoir lu Métadonnées de propriété de dépendance.

Informations communiquées par les métadonnées de propriété d'infrastructure

Les métadonnées de propriété d'infrastructure peuvent être réparties dans les catégories suivantes :

  • Propriétés de présentation qui affectent un élément (AffectsArrange, AffectsMeasure, AffectsRender). Vous pouvez définir ces indicateurs dans des métadonnées si la propriété affecte ces aspects respectifs et si vous implémentez les méthodes MeasureOverride / ArrangeOverride dans votre classe pour fournir un comportement de rendu spécifique et des informations au système de disposition. En général, une telle implémentation vérifie la présence d'invalidations de propriété dans les propriétés de dépendance dont des propriétés de disposition avaient la valeur true dans les métadonnées de propriété, et seules ces invalidations font l'objet d'une demande de nouvelle passe de disposition.

  • Propriétés de présentation qui affectent l'élément parent d'un élément (AffectsParentArrange, AffectsParentMeasure). FixedPage.Left et Paragraph.KeepWithNext sont deux exemples où ces indicateurs sont définis par défaut.

  • Inherits. Par défaut, les propriétés de dépendance n'héritent pas de valeurs. OverridesInheritanceBehavior permet au chemin d'héritage de voyager également dans une arborescence visuelle, ainsi qu'exigé par certains scénarios de composition de contrôle.

    Remarque :

    Le terme "hérite" dans le contexte des valeurs de propriété revêt une signification spécifique pour les propriétés de dépendance ; il signifie que les éléments enfants peuvent hériter de la valeur de propriété de dépendance réelle des éléments parents grâce à une fonctionnalité au niveau de l'infrastructure WPF du système de propriétés WPF. Cette notion est donc sans rapport direct avec le type de code managé et l'héritage de membres par le biais de types dérivés. Pour plus d'informations, consultez Héritage de la valeur de propriété.

  • Caractéristiques de liaison de données (IsNotDataBindable, BindsTwoWayByDefault). Par défaut, les propriétés de dépendance de l'infrastructure prennent en charge la liaison de données, avec un comportement de liaison unidirectionnel. Vous pouvez désactiver la liaison de données s'il n'existe aucun scénario (dans la mesure où elles sont conçues pour être flexibles et extensibles, il existe très peu d'exemples de telles propriétés dans les APIWPF par défaut). Vous pouvez définir une liaison bidirectionnelle par défaut pour les propriétés qui lient les comportements d'un contrôle parmi ses composants (IsSubmenuOpen, par exemple) ou lorsque la liaison bidirectionnelle est le scénario attendu et le plus courant pour les utilisateurs (Text, par exemple). La modification des métadonnées associées à la liaison de données influence uniquement la valeur par défaut ; cette valeur par défaut peut toujours être modifiée pour chaque liaison individuelle. Pour plus d'informations sur les modes de liaison et la liaison en général, consultez Vue d'ensemble de la liaison de données.

  • Enregistrement ou non des propriétés dans un journal par des applications ou des services prenant en charge la journalisation (Journal). Par défaut, la journalisation n'est pas activée pour les éléments généraux, mais l'est de manière sélective pour certains contrôles d'entrée d'utilisateur. Cette propriété est destinée à être lue par des services de journalisation, y compris l'implémentation WPF de journalisation, et est généralement définie sur des contrôles utilisateur, tels que des sélections d'utilisateur dans des listes qui doivent être rendues persistantes à travers les étapes de navigation. Pour plus d'informations sur le journal, consultez Vue d'ensemble de la navigation.

Lecture de FrameworkPropertyMetadata

Les propriétés liées ci-dessus sont les propriétés que FrameworkPropertyMetadata ajoute à sa classe de base immédiate UIPropertyMetadata. Par défaut, toutes ces propriétés ont la valeur false. Lorsqu'il est important de connaître la valeur de ces propriétés, une demande de métadonnées pour une propriété doit essayer d'effectuer un cast des métadonnées retournées à FrameworkPropertyMetadata, puis vérifier les valeurs des propriétés individuelles, selon les besoins.

Spécification des métadonnées

Lorsque vous créez une instance de métadonnées en vue d'appliquer des métadonnées à une nouvelle inscription de propriété de dépendance, vous avez le choix de la classe de métadonnées à utiliser : la classe PropertyMetadata de base ou une classe dérivée quelconque, telle que FrameworkPropertyMetadata. En général, vous devez utiliser FrameworkPropertyMetadata, en particulier si votre propriété interagit avec le système de propriétés et des fonctions WPF telles que la disposition et la liaison de données. Une autre option pour créer des scénarios plus sophistiqués consiste à dériver à partir de la classe FrameworkPropertyMetadata afin de créer votre propre classe de rapport de métadonnées, dont les membres contiennent des informations complémentaires. Vous pouvez également utiliser PropertyMetadata ou UIPropertyMetadata pour communiquer le degré de prise en charge des fonctionnalités de votre implémentation.

Pour les propriétés existantes (appel AddOwner ou OverrideMetadata), vous devez toujours effectuer une substitution avec le type de métadonnées utilisé par l'inscription d'origine.

Si vous créez une instance FrameworkPropertyMetadata, vous pouvez compléter ces métadonnées avec des valeurs pour les propriétés spécifiques qui communiquent les caractéristiques de propriété d'infrastructure de deux façons différentes :

  1. Utilisez la signature de constructeur FrameworkPropertyMetadata qui autorise un paramètre flags. Saisissez dans ce paramètre toutes les valeurs combinées souhaitées des indicateurs d'énumération FrameworkPropertyMetadataOptions.

  2. Utilisez une des signatures sans paramètre flags, puis affectez la valeur true à chaque propriété booléenne de création de rapport sur FrameworkPropertyMetadata pour chaque modification de caractéristique souhaitée. Si vous optez pour cette solution, vous devez définir ces propriétés avant la construction de tout élément possédant cette propriété de dépendance ; les propriétés booléennes sont en lecture-écriture afin d'autoriser ce comportement d'évitement du paramètre flags tout en complétant les métadonnées. Les métadonnées doivent toutefois être sealed avant l'utilisation de la propriété. Par conséquent, toute tentative de définition des propriétés après l'envoi d'une demande de métadonnées est une opération incorrecte.

Comportement de fusion des métadonnées de propriété d'infrastructure

Lorsque vous substituez des métadonnées de propriété l'infrastructure, les différentes caractéristiques des métadonnées sont soit fusionnées, soit remplacées.

  • PropertyChangedCallback est fusionné. Si vous ajoutez un nouveau PropertyChangedCallback, ce rappel est stocké dans les métadonnées. Si vous ne spécifiez pas de PropertyChangedCallback dans la substitution, la valeur de PropertyChangedCallback est promue en tant que référence de l'ancêtre le plus proche qui l'a spécifiée dans les métadonnées.

  • Le comportement réel du système de propriétés pour PropertyChangedCallback est le suivant : des implémentations sont conservées et ajoutées à une table pour tous les propriétaires de métadonnées dans la hiérarchie et l'exécution par le système de propriétés commence par les rappels de la classe la plus dérivée. Les rappels hérités ne sont exécutés qu'une seule fois et sont considérés comme s'ils appartenaient à la classe qui les a placés dans les métadonnées.

  • DefaultValue est remplacé. Si vous ne spécifiez pas de PropertyChangedCallback dans la substitution, la valeur de DefaultValue est prise dans l'ancêtre le plus proche qui l'a spécifiée dans les métadonnées.

  • Les implémentations de CoerceValueCallback sont remplacées. Si vous ajoutez un nouveau CoerceValueCallback, ce rappel est stocké dans les métadonnées. Si vous ne spécifiez pas de CoerceValueCallback dans la substitution, la valeur de CoerceValueCallback est promue en tant que référence de l'ancêtre le plus proche qui l'a spécifiée dans les métadonnées.

  • Le comportement du système de propriétés est le suivant : seul le CoerceValueCallback présent dans les métadonnées immédiates est appelé. Aucune référence à d'autres implémentations de CoerceValueCallback dans la hiérarchie n'est conservée.

  • Les indicateurs de FrameworkPropertyMetadataOptions sont combinés sous la forme d'une opération de bits OR, par opposition aux diverses valeurs des propriétés booléennes équivalentes sur FrameworkPropertyMetadata des métadonnées héritées. IsAnimationProhibited est remplacé par une nouvelle valeur ou conserve la valeur des métadonnées hérités.

Ce comportement est implémenté par Merge et peut être substitué sur des classes de métadonnées dérivées.

Voir aussi

Concepts

Métadonnées de propriété de dépendance

Vue d'ensemble des propriétés de dépendance

Propriétés de dépendance personnalisées

Référence

GetMetadata