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 :
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 .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ètreflags
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.
PropertyChangedCallback est fusionné. Si vous ajoutez un nouveau PropertyChangedCallbackrappel, ce rappel est stocké dans les métadonnées. Si vous ne spécifiez pas d’élément PropertyChangedCallback dans le remplacement, la valeur de PropertyChangedCallback celle-ci est promue en tant que référence à partir de l’ancêtre le plus proche qui l’a spécifiée dans les métadonnées.
Le comportement PropertyChangedCallback réel du système de propriétés est que les implémentations pour tous les propriétaires de métadonnées de la hiérarchie sont conservées et ajoutées à une table, avec l’ordre d’exécution par le système de propriétés étant que les rappels de la classe la plus profondément dérivée sont appelés en premier. 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 d’élément PropertyChangedCallback dans le remplacement, la valeur de DefaultValue provient de l’ancêtre le plus proche qui l’a spécifiée dans les métadonnées.
CoerceValueCallback les implémentations sont remplacées. Si vous ajoutez un nouveau CoerceValueCallbackrappel, ce rappel est stocké dans les métadonnées. Si vous ne spécifiez pas d’élément CoerceValueCallback dans le remplacement, la valeur de CoerceValueCallback celle-ci est promue en tant que référence à partir 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 que seules les CoerceValueCallback métadonnées immédiates sont appelées. Aucune référence à d’autres CoerceValueCallback implémentations de la hiérarchie n’est conservée.
Les indicateurs d’énumération FrameworkPropertyMetadataOptions sont combinés en tant qu’opération OR au niveau du bit. Si vous spécifiez FrameworkPropertyMetadataOptions, les options d’origine ne sont pas remplacées. Pour modifier une option, définissez la propriété correspondante sur FrameworkPropertyMetadata. Par exemple, si l’objet d’origine FrameworkPropertyMetadata définit l’indicateur FrameworkPropertyMetadataOptions.NotDataBindable , vous pouvez le modifier en définissant FrameworkPropertyMetadata.IsNotDataBindable
false
sur .
Ce comportement est implémenté par Merge, et peut être substitué sur les classes de métadonnées dérivées.
Voir aussi
.NET Desktop feedback
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour