Initialisation du concepteur et configuration des métadonnées

La manipulation des métadonnées et des attributs de filtre associés à un composant concepteur ou concepteur fournit un mécanisme permettant aux applications de définir les outils utilisés par un concepteur particulier pour gérer différents Type objets (tels que des structures de données, des classes ou des entités graphiques), lorsque le concepteur est disponible et comment l’IDE Visual Studio est configuré pour prendre en charge le concepteur (par exemple, quelle catégorie ou onglet de boîte à outils est disponible).

Le Kit de développement logiciel (SDK) Visual Studio fournit plusieurs mécanismes pour faciliter le contrôle de l’initialisation d’un composant concepteur ou du composant concepteur et la manipulation de ses métadonnées par un VSPackage.

Initialiser les métadonnées et les informations de configuration

Étant donné qu’ils sont chargés à la demande, les VSPackages n’ont peut-être pas été chargés par l’environnement Visual Studio avant l’instanciation d’un concepteur. Par conséquent, les VSPackages ne peuvent pas utiliser le mécanisme standard pour configurer un composant concepteur ou concepteur lors de la création, qui consiste à gérer un DesignerCreated événement. Au lieu de cela, un VSPackage implémente une instance de l’interface DesignSurfaceExtension et s’inscrit lui-même pour fournir des personnalisations, appelées extensions de surface de conception.

Personnaliser l’initialisation

La personnalisation d’un concepteur, d’un composant ou d’une surface de concepteur implique :

  1. Modification des métadonnées du concepteur et modification efficace de l’accès ou de la conversion d’un certain nombre Type de données.

    Cela est généralement effectué par le biais des mécanismes ou TypeConverter des UITypeEditor mécanismes.

    Par exemple, lorsque System.Windows.Formsdes concepteurs basés sur des bases de données sont initialisés, l’environnement Visual Studio modifie les UITypeEditorImage objets utilisés avec le concepteur pour utiliser le gestionnaire de ressources pour obtenir des bitmaps plutôt que le système de fichiers.

  2. Intégration à l’environnement, par exemple, en s’abonnant à des événements ou en obtenant des informations de configuration de projet. Vous pouvez obtenir des informations de configuration de projet et vous abonner à des événements en obtenant l’interface ITypeResolutionService .

  3. Modification de l’environnement utilisateur en activant les catégories de boîte à outils appropriées ou en limitant l’applicabilité du concepteur en appliquant une instance de la ToolboxItemFilterAttribute classe au concepteur.

Initialisation du concepteur par un VSPackage

Un VSPackage doit gérer l’initialisation du concepteur en :

  1. Création d’un objet implémentant la DesignSurfaceExtension classe.

    Remarque

    La DesignSurfaceExtension classe ne doit jamais être implémentée sur le même objet que la Package classe.

  2. Inscription de la classe qui implémente DesignSurfaceExtension comme prise en charge des extensions du concepteur VSPackage. Inscrivez la classe en appliquant des instances de DesignSurfaceExtensionAttribute, ProvideObjectAttributeet ProvideServiceAttribute à la classe qui fournit l’implémentation de VSPackage .Package

Chaque fois qu’un composant concepteur ou concepteur est créé, l’environnement Visual Studio :

  • Accède à chaque fournisseur d’extension d’aire de conception inscrit.

  • Instancie et initialise une instance de l’objet du fournisseur d’extensions de surface de DesignSurfaceExtension conception.

  • Appelle la méthode ou OnComponentCreated la méthode de chaque fournisseur d’extension de surface de OnDesignerCreated conception (le cas échéant).

Lors de l’implémentation de l’objet DesignSurfaceExtension en tant que membre d’un VSPackage, il est important de comprendre que :

  • L’environnement Visual Studio ne fournit aucun contrôle sur les métadonnées ou d’autres paramètres de configuration modifiés par un fournisseur particulier DesignSurfaceExtension . Il est possible pour deux fournisseurs ou plus DesignSurfaceExtension de modifier la même fonctionnalité de concepteur de manière conflictuelle, la modification finale étant définitive. Il est indéterminé quelle modification est appliquée pour la dernière fois.

  • Il est possible de restreindre explicitement une implémentation de l’objet DesignSurfaceExtension à des concepteurs spécifiques en appliquant des instances de ToolboxItemFilterAttribute cette implémentation. Pour plus d’informations sur le filtrage des éléments de boîte à outils , consultez les ToolboxItemFilterAttribute rubriques et ToolboxItemFilterType.

Approvisionnement de métadonnées supplémentaires

Un VSPackage peut modifier la configuration d’un concepteur ou d’un composant concepteur autre qu’au moment du design.

La ProvideDesignerMetadataAttribute classe peut être utilisée par programmation ou appliquée à un VSPackage qui fournit un concepteur.

Une instance de la ProvideDesignerMetadataAttribute classe est utilisée pour modifier les métadonnées des composants créés sur une surface de conception. Par exemple, vous pouvez remplacer un navigateur de propriétés par défaut utilisé par des objets par CommonDialog un navigateur de propriétés personnalisé.

Les modifications fournies par une instance d’application ProvideDesignerMetadataAttribute à l’implémentation d’un Package VSPackage peuvent avoir l’une des deux étendues suivantes :

  • Global : pour toutes les nouvelles instances d’un composant donné

  • Local : se rapportant uniquement à l’instance du composant créé sur une surface de conception fournie par le VSPackage actuel.

La IsGlobal propriété de l’instance appliquée à l’implémentation ProvideDesignerMetadataAttribute d’un Package VSPackage détermine cette étendue.

L’application de l’attribut à une implémentation avec la IsGlobal propriété de l’objet ProvideDesignerMetadataAttribute défini truesur , comme ci-dessous, modifie le navigateur pour l’ensemble de Package l’environnement Visual Studio :

[ProvideDesignerMetadata(typeof(Color), typeof(CustomBrowser), IsGlobal=true )]

internal class MyPackage : Package {}

Si l’indicateur global a été défini falsesur , la modification des métadonnées est locale sur le concepteur actuel pris en charge par le VSPackage actuel :

[ProvideDesignerMetadata(typeof(Color), typeof(CustomBrowser), IsGlobal=false )]

internal class MyPackage : Package {}

Remarque

L’aire de conception prend uniquement en charge la création de composants. Par conséquent, seuls les composants peuvent avoir des métadonnées locales. Dans l’exemple ci-dessus, nous tentions de modifier une propriété, telle que la Color propriété d’un objet. Si false elle a été passée pour l’indicateur global, CustomBrowser n’apparaît jamais parce que le concepteur ne crée jamais réellement une instance de Color. La définition de l’indicateur false global est utile pour les composants, tels que les contrôles, les minuteurs et les boîtes de dialogue.