Métadonnées de propriété framework (WPF .NET)
Vous pouvez définir des options de métadonnées de propriété d’infrastructure pour les propriétés de dépendance au niveau de l’infrastructure WPF (Windows Presentation Foundation). La désignation au niveau de l’infrastructure WPF s’applique lorsque les API de présentation WPF et les exécutables gèrent le rendu et la liaison de données. Les API de présentation et les exécutables interrogent la FrameworkPropertyMetadata propriété de dépendance.
Prérequis
L’article suppose une connaissance de base des propriétés de dépendance et que vous avez lu la vue d’ensemble des propriétés de dépendance. Pour suivre les exemples de cet article, il vous aide à connaître le langage XAML (Extensible Application Markup Language) et à savoir comment écrire des applications WPF.
Catégories de métadonnées de propriété framework
FrameworkPropertyMetadata entre dans ces catégories :
Métadonnées qui affectent la disposition d’un élément, en particulier les indicateurs de métadonnées et AffectsRender les AffectsArrangeAffectsMeasureindicateurs de métadonnées. Vous pouvez définir ces indicateurs si l’implémentation de votre propriété de dépendance affecte un aspect visuel et que vous implémentez MeasureOverride ou ArrangeOverride dans votre classe. Les
MeasureOverride
méthodes etArrangeOverride
le comportement spécifiques à l’implémentation fournissent des informations de rendu et de comportement spécifiques au système de disposition. QuandAffectsArrange
,AffectsMeasure
ouAffectsRender
sont définistrue
dans les métadonnées d’une propriété de dépendance et sa valeur effective change, le système de propriétés WPF lance une demande d’invalidation des visuels de l’élément pour déclencher un redessinage.Métadonnées qui affectent la disposition de l’élément parent d’un élément, en particulier les AffectsParentArrange indicateurs de métadonnées.AffectsParentMeasure Exemples de propriétés de dépendance WPF qui définissent ces indicateurs sont FixedPage.Left et Paragraph.KeepWithNext.
Métadonnées d’héritage de valeur de propriété, en particulier les Inherits indicateurs de métadonnées.OverridesInheritanceBehavior Par défaut, les propriétés de dépendance n’héritent pas des 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. Pour plus d’informations, consultez Héritage des valeurs de propriété.
Remarque
Le terme « hérite » dans le contexte des valeurs de propriété est spécifique aux propriétés de dépendance et n’est pas directement lié aux types de code managé et à l’héritage des membres par le biais de types dérivés. Dans le contexte des propriétés de dépendance, cela signifie que les éléments enfants peuvent hériter des valeurs de propriété de dépendance des éléments parents.
Métadonnées de liaison de données, en particulier les BindsTwoWayByDefault indicateurs de métadonnées.IsNotDataBindable Par défaut, les propriétés de dépendance dans l’infrastructure WPF prennent en charge la liaison unidirectionnelle. Envisagez de définir la liaison bidirectionnelle comme valeur par défaut pour les propriétés dont l’état du rapport est modifiable par l’action de l’utilisateur, par exempleIsSelected. Envisagez également de définir la liaison bidirectionnelle comme valeur par défaut lorsque les utilisateurs d’un contrôle attendent qu’une propriété l’implémente, par exemple TextBox.Text.
BindsTwoWayByDefault
affecte uniquement le mode de liaison par défaut. Pour modifier la direction du flux de données d’une liaison, définissez Binding.Mode. Vous pouvez utiliserIsNotDataBindable
pour désactiver la liaison de données en l’absence de cas d’usage. Pour plus d’informations sur les liaisons de données, consultez vue d’ensemble de la liaison de données.Journalisation des métadonnées, en particulier l’indicateur de Journal métadonnées. La valeur par défaut de l’indicateur
Journal
est uniquementtrue
pour certaines propriétés de dépendance, telles que SelectedIndex. Les contrôles d’entrée utilisateur doivent définir l’indicateurJournal
des propriétés dont les valeurs contiennent des sélections utilisateur qui doivent être stockées. L’indicateurJournal
est lu par les applications ou les services qui prennent en charge la journalisation, y compris les services de journalisation WPF. Pour plus d’informations sur le stockage des étapes de navigation, consultez vue d’ensemble de la navigation.
FrameworkPropertyMetadata dérive directement de UIPropertyMetadata, et implémente les indicateurs abordés ici. Sauf si spécifiquement défini, FrameworkPropertyMetadata
les indicateurs ont une valeur par défaut .false
Lecture de FrameworkPropertyMetadata
Pour récupérer les métadonnées d’une propriété de dépendance, appelez GetMetadata l’identificateur DependencyProperty . L’appel GetMetadata
retourne un PropertyMetadata
objet. Si vous avez besoin d’interroger les valeurs de métadonnées de l’infrastructure converties PropertyMetadata
en FrameworkPropertyMetadata.
Spécification de FrameworkPropertyMetadata
Lorsque vous inscrivez une propriété de dépendance, vous avez la possibilité de créer et d’affecter des métadonnées. L’objet de métadonnées que vous affectez peut être PropertyMetadata ou l’une de ses classes dérivées, comme FrameworkPropertyMetadata. Choisissez FrameworkPropertyMetadata
les propriétés de dépendance qui s’appuient sur les API de présentation WPF et les exécutables pour le rendu et la liaison de données. Une option plus avancée consiste à dériver pour créer une classe de création de rapports de FrameworkPropertyMetadata
métadonnées personnalisée avec plus d’indicateurs. Vous pouvez également utiliser UIPropertyMetadata pour les propriétés non-framework qui affectent le rendu de l’interface utilisateur.
Bien que les options de métadonnées soient généralement définies lors de l’inscription d’une nouvelle propriété de dépendance, vous pouvez les respecifier ou OverrideMetadata AddOwner les appeler. Lors de la substitution de métadonnées, remplacez toujours par le même type de métadonnées que celui utilisé lors de l’inscription de propriétés.
Les caractéristiques de propriété exposées par FrameworkPropertyMetadata
sont parfois appelées indicateurs. Si vous créez une FrameworkPropertyMetadata
instance, il existe deux façons de remplir les valeurs d’indicateur :
Définissez les indicateurs sur une instance du type d’énumération FrameworkPropertyMetadataOptions .
FrameworkPropertyMetadataOptions
vous permet de spécifier des indicateurs de métadonnées dans une combinaison OR au niveau du bit. Ensuite, instanciezFrameworkPropertyMetadata
à l’aide d’un constructeur qui a unFrameworkPropertyMetadataOptions
paramètre et transmettez votreFrameworkPropertyMetadataOptions
instance. Pour modifier les indicateurs de métadonnées après avoir passéFrameworkPropertyMetadataOptions
dans le FrameworkPropertyMetadata constructeur, modifiez la propriété correspondante sur la nouvelleFrameworkPropertyMetadata
instance. Par exemple, si vous définissez l’indicateur FrameworkPropertyMetadataOptions.NotDataBindable , vous pouvez annuler cela en définissant FrameworkPropertyMetadata.IsNotDataBindable surfalse
.Instanciez à l’aide d’un constructeur qui n’a pas de
FrameworkPropertyMetadataOptions
paramètre, puis définissezFrameworkPropertyMetadata
les indicateurs applicables Boolean surFrameworkPropertyMetadata
. Définissez les valeurs d’indicateur avant d’associer votreFrameworkPropertyMetadata
instance à une propriété de dépendance, sinon vous obtiendrez un InvalidOperationException.
Comportement de remplacement des métadonnées
Lorsque vous remplacez les métadonnées de propriété de l’infrastructure, les valeurs de métadonnées modifiées remplacent ou sont fusionnées avec les valeurs d’origine :
Pour un PropertyChangedCallback, la logique de fusion par défaut conserve les valeurs précédentes
PropertyChangedCallback
d’une table et toutes sont appelées sur une modification de propriété. L’ordre de rappel est déterminé par profondeur de classe, où un rappel inscrit par la classe de base de la hiérarchie s’exécuterait en premier. Les rappels hérités s’exécutent une seule fois et appartiennent à la classe qui les a ajoutées aux métadonnées.Pour un DefaultValue, la nouvelle valeur remplace la valeur par défaut existante. Si vous ne spécifiez pas de
DefaultValue
métadonnées de remplacement et si l’indicateurInherits
existant FrameworkPropertyMetadata est défini, la valeur par défaut provient de l’ancêtre le plus proche spécifiéDefaultValue
dans les métadonnées.Pour un CoerceValueCallback, la nouvelle valeur remplace une valeur existante
CoerceValueCallback
. Si vous ne spécifiez pas deCoerceValueCallback
métadonnées de remplacement, la valeur provient de l’ancêtre le plus proche de la chaîne d’héritage qui a spécifié unCoerceValueCallback
.Pour
FrameworkPropertyMetadata
les indicateurs non hérités, vous pouvez remplacer la valeur par défautfalse
par unetrue
valeur. Toutefois, vous pouvez uniquement remplacer unetrue
valeur par unefalse
valeur pour Inherits, Journal, OverridesInheritanceBehavioret SubPropertiesDoNotAffectRender.
Remarque
La logique de fusion par défaut est implémentée par la Merge méthode. Vous pouvez spécifier une logique de fusion personnalisée dans une classe dérivée qui hérite d’une propriété de dépendance, en substituant Merge
cette classe.
Voir aussi
.NET Desktop feedback