Métadonnées de propriété de framework

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

Prérequis

Cette rubrique suppose 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 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é de framework

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

  • Propriétés de disposition de création de rapports qui affectent un élément (AffectsArrange, AffectsMeasure, AffectsRender). Vous pouvez définir ces indicateurs dans les métadonnées si la propriété affecte ces aspects respectifs, et vous implémentez également les MeasureOverride / ArrangeOverride méthodes de votre classe pour fournir un comportement de rendu et des informations spécifiques 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 disposition de création de rapports qui affectent l’élément parent d’un élément (AffectsParentArrange, AffectsParentMeasure). Voici quelques exemples où ces indicateurs sont définis par défaut et FixedPage.LeftParagraph.KeepWithNext.

  • 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 se déplacer également dans une arborescence visuelle, ce qui est nécessaire pour certains scénarios de composition de contrôle.

    Remarque

    Le terme « hérite » dans le contexte des valeurs de propriété signifie quelque chose de spécifique pour les propriétés de dépendance ; cela signifie que les éléments enfants peuvent hériter de la valeur réelle de propriété de dépendance des éléments parents en raison d’une fonctionnalité de niveau framework 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 de création de rapports (IsNotDataBindable, BindsTwoWayByDefault). Par défaut, les propriétés de dépendance du framework 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’y avait aucun scénario (car elles sont destinées à être flexibles et extensibles, il n’existe pas de nombreux exemples de ces propriétés dans les API WPF par défaut). Vous pouvez définir la liaison pour avoir une valeur par défaut bidirectionnelle pour les propriétés qui associent les comportements d’un contrôle entre ses composants (IsSubmenuOpen est un exemple) ou où la liaison bidirectionnelle est le scénario courant et attendu pour les utilisateurs (Text est un exemple). Le changement 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 changé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.

  • Indique si les propriétés doivent être journalisées par des applications ou des services qui prennent 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 les services de journalisation, y compris l’implémentation WPF de la journalisation, et est généralement définie sur les contrôles utilisateur tels que les sélections d’utilisateurs dans les listes qui doivent être conservées dans les étapes de navigation. Pour plus d’informations sur le journal, consultez Vue d’ensemble de la navigation.

Lecture de FrameworkPropertyMetadata

Chacune des propriétés liées ci-dessus est les propriétés spécifiques que l’ajout FrameworkPropertyMetadata à sa classe UIPropertyMetadatade base immédiate . Par défaut, toutes ces propriétés ont la valeur false. Une demande de métadonnées pour une propriété où la connaissance de la valeur de ces propriétés est importante doit tenter de convertir les métadonnées FrameworkPropertyMetadataretournées en , puis case activée 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 à des fins d’application de métadonnées à une nouvelle inscription de propriété de dépendance, vous avez le choix entre la classe de métadonnées à utiliser : la base PropertyMetadata ou une classe dérivée telle que FrameworkPropertyMetadata. En général, vous devez utiliser FrameworkPropertyMetadata, en particulier si votre propriété a une interaction avec le système de propriétés et les fonctions WPF telles que la disposition et la liaison de données. Une autre option pour les scénarios plus sophistiqués consiste à dériver de la création de FrameworkPropertyMetadata votre propre classe de création de rapports de métadonnées avec des informations supplémentaires portées dans ses membres. Vous pouvez également utiliser PropertyMetadata ou UIPropertyMetadata communiquer le degré de prise en charge des fonctionnalités de votre implémentation.

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

Si vous créez une FrameworkPropertyMetadata instance, il existe deux façons de remplir ces métadonnées avec des valeurs pour les propriétés spécifiques qui communiquent les caractéristiques de propriété de l’infrastructure :

  1. Utilisez la signature du FrameworkPropertyMetadata constructeur qui autorise un flags paramètre. Ce paramètre doit être rempli avec toutes les valeurs combinées souhaitées des indicateurs d’énumération FrameworkPropertyMetadataOptions .

  2. Utilisez l’une des signatures sans flags paramètre, puis définissez chaque propriété booléenne de création de rapports sur FrameworkPropertyMetadatatrue pour chaque modification 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é de framework

Quand vous substituez des métadonnées de propriété de framework, les différentes caractéristiques des métadonnées sont fusionnées ou remplacées.

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

Voir aussi