Architecture d'édition de propriété

La modification visuelle des propriétés d'objet est une fonctionnalité importante du Concepteur WPF pour Visual Studio. Cette rubrique décrit l'architecture du système de modification des propriétés du Concepteur WPF.

Entrée de propriété

La classe PropertyEntry représente la propriété elle-même. La classe PropertyValue représente la valeur sous-jacente d'une propriété.

Éditeurs de catégories

Un éditeur de catégories permet à l'utilisateur final de modifier simultanément plusieurs propriétés dans une catégorie. Les propriétés associées à un éditeur de catégories ne s'affichent nulle part ailleurs dans la fenêtre Propriétés. Les propriétés qui ne sont pas modifiées par cet éditeur de catégories sont visibles et modifiables. Vous pouvez spécifier les propriétés d'une catégorie qui peuvent être modifiées par un éditeur de catégories.

Éditeurs de valeurs de propriété

Un éditeur de valeurs de propriété définit le mode d'affichage et de modification d'un type particulier dans la fenêtre Propriétés d'un concepteur visuel. Les éditeurs de valeurs de propriété jouent un rôle dans le Concepteur WPF, similaire à celui de la classe UITypeEditor dans l'architecture System.ComponentModel. Toutefois, les éditeurs du Concepteur WPF sont indépendants de l'architecture de System.ComponentModel et des Windows Forms.

Un PropertyValueEditor contient les parties répertoriées dans le tableau suivant.

Partie d'un éditeur de valeurs de propriété

Description

Éditeur inline (également appelé affichage)

Éditeur hébergé dans le même espace physique que l'affichage dans la fenêtre Propriétés d'hébergement. Par exemple, éditeur de propriétés Margin.

Éditeur étendu

Éditeur qui n'est normalement pas hébergé sur place. Il s'agit de l'équivalent de l'éditeur de styles déroulants dans l'architecture System.ComponentModel. Par exemple, éditeur de propriétés HorizontalAlignment.

Boîte de dialogue

Éditeur implémenté dans sa propre boîte de dialogue. Par exemple, éditeur de propriétés RowDefinitions.

Vous pouvez utiliser les valeurs par défaut pour l'affichage et les parties de l'éditeur inline. PropertyValueEditor n'est pas requis pour fournir une partie d'éditeur étendu.

Chaque partie est un DataTemplate WPF. Les parties sont indépendantes les unes des autres et peuvent dès lors être utilisées de manière indépendante.

La fenêtre Propriétés d'hébergement fournit le cadre autour de l'affichage et des éditeurs. Ainsi, l'hôte peut fournir un style cohérent pour tous les éditeurs et différents hôtes peuvent fournir des styles différents. Par exemple, Expression Blend et Visual Studio fournissent une apparence et un comportement différents pour leurs fenêtres Propriétés respectives.

La liaison de données WPF et un jeu standard d'objets WPF RoutedCommand fournissent le mécanisme de communication entre l'hôte et les parties PropertyValueEditor.

Dans le cas le plus simple, une partie d'éditeur de valeurs peut être un DataTemplate qui contient des contrôles WPF standard. Dans des cas plus complexes, une partie de type peut être un DataTemplate qui fait référence à votre contrôle personnalisé.

Vous pouvez implémenter trois types différents d'éditeurs de valeurs de propriété, répertoriés dans le tableau suivant.

Type d'éditeur de valeurs de propriété

Description

Simple

L'éditeur de valeurs de propriété est constitué d'un éditeur inline.

Étendu

L'éditeur de valeurs de propriété est constitué d'un éditeur inline et d'un éditeur étendu.

Boîte de dialogue

L'éditeur de valeurs de propriété est constitué d'un éditeur inline et d'une boîte de dialogue.

Classes d'infrastructure

Les classes d'infrastructure sont requises pour les implémentations de l'éditeur de valeurs de propriété. Ces classes sont répertoriées dans le tableau suivant. Elles constituent l'infrastructure principale permettant d'héberger ou de créer des éditeurs de valeurs.

Classe d'infrastructure

Description

PropertyValue

Représente la valeur d'une propriété.

PropertyValueEditor

Classe de base des éditeurs de valeurs.

PropertyValueEditorCommands

Types RoutedCommand et implémentations par défaut de gestionnaires pour ces commandes.

DialogPropertyValueEditor

Classe de base abstraite pour les éditeurs de valeurs de boîte de dialogue.

  • Définit la commande ShowDialog et un gestionnaire par défaut pour cette commande.

  • Contient un affichage par défaut et un modèle d'éditeur inline.

  • Marque PropertyValueEditor en tant qu'éditeur de boîtes de dialogue.

Implémentation d'un éditeur de valeurs de propriété

Les sections suivantes décrivent les aspects liés à l'implémentation d'un éditeur de valeurs de propriété.

Valeur, StringValue et Collection

Le modèle PropertyValue contient trois propriétés liées à la valeur de la propriété. Les propriétés PropertyValue sont répertoriées dans le tableau suivant.

Propriété PropertyValue

Description

Value

Représentation sous forme d'objet des données.

StringValue

Représentation sous forme de chaîne des données pouvant être utilisée à des fins d'affichage ou de sérialisation.

Collection

Représentation sous forme de collection des données.

StringValue est une représentation sous forme de chaîne des données qui peut être utilisée à des fins d'affichage ou de sérialisation. Value et StringValue mettent en cache tous les appels définis.

Le cache de StringValue est vidé lorsque la propriété Value est définie. Un scénario courant consiste à prendre en charge la mise à jour dynamique de la propriété conçue (en tant que types utilisateur), où StringValue est lié aux données à l'entrée de texte. Toutefois, la propriété sous-jacente n'est définie que lorsque le texte dynamique respecte certains critères.

Spécifications PropertyValueEditor

Un éditeur de valeurs de propriété correctement implémenté doit répondre aux spécifications suivantes.

  • L'éditeur de valeurs de propriété doit être conçu afin que les parties d'éditeur inline et d'éditeur étendu puissent être utilisées de manière indépendante.

  • Un éditeur de valeurs de propriété ne doit pas stocker d'état. Les éditeurs de valeurs de propriété sont sans état, peuvent être mis en cache par une implémentation hôte et peuvent être réutilisés dans plusieurs valeurs de propriété.

  • Un éditeur de valeurs de propriété ne doit pas supposer qu'un seul contrôle de partie d'éditeur de valeurs (affichage/inline/étendu) est actif à un temps donné. Par exemple, pour une boîte de dialogue, les parties affichage, inline et interface utilisateur étendue peuvent être simultanément actives.

  • Un contrôle implémenté dans le cadre d'un éditeur de valeurs de propriété ne doit pas stocker d'état. Un contrôle implémenté dans le cadre d'un éditeur de valeurs ne doit pas supposer qu'il ne sera lié qu'à une seule valeur de propriété. Les contrôles peuvent être recyclés afin de modifier différentes valeurs de propriété. Toutes les informations mises en cache doivent être vidées si le modèle de données est mis à jour.

  • Un contrôle implémenté dans le cadre d'un éditeur de valeurs de propriété ne doit effectuer aucune hypothèse concernant l'hôte ou ses contrôles parents. Les seuls mécanismes de communication qui doivent être utilisés sont le modèle de données PropertyValue, par le biais de DataContext, et l'ensemble de commandes standard.

Voir aussi

Référence

PropertyEntry

PropertyValue

PropertyValueEditor

Autres ressources

Extensibilité du Concepteur WPF

Création d'éditeurs personnalisés

WPF Designer Extensibility Samples