Partager via


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 et ArrangeOverride le comportement spécifiques à l’implémentation fournissent des informations de rendu et de comportement spécifiques au système de disposition. Quand AffectsArrange, AffectsMeasureou AffectsRender sont définis true 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 utiliser IsNotDataBindable 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 uniquement true pour certaines propriétés de dépendance, telles que SelectedIndex. Les contrôles d’entrée utilisateur doivent définir l’indicateur Journal des propriétés dont les valeurs contiennent des sélections utilisateur qui doivent être stockées. L’indicateur Journal 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 :

  1. 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, instanciez FrameworkPropertyMetadata à l’aide d’un constructeur qui a un FrameworkPropertyMetadataOptions paramètre et transmettez votre FrameworkPropertyMetadataOptions 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 nouvelle FrameworkPropertyMetadata instance. Par exemple, si vous définissez l’indicateur FrameworkPropertyMetadataOptions.NotDataBindable , vous pouvez annuler cela en définissant FrameworkPropertyMetadata.IsNotDataBindable sur false.

  2. Instanciez à l’aide d’un constructeur qui n’a pas de FrameworkPropertyMetadataOptions paramètre, puis définissez FrameworkPropertyMetadata les indicateurs applicables Boolean sur FrameworkPropertyMetadata. Définissez les valeurs d’indicateur avant d’associer votre FrameworkPropertyMetadata 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’indicateur Inherits 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 de CoerceValueCallback 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é un CoerceValueCallback.

  • Pour FrameworkPropertyMetadata les indicateurs non hérités, vous pouvez remplacer la valeur par défaut false par une true valeur. Toutefois, vous pouvez uniquement remplacer une true valeur par une false 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