Initialisation du concepteur et configuration de métadonnées
La manipulation des métadonnées et des attributs de filtre associés à un concepteur ou un composant de concepteur fournit un mécanisme pour les applications définissent les outils sont utilisés par un concepteur particulier pour gérer des objets individuels d' Type (tels que des structures de données, les classes, ou entités graphiques), lorsque le concepteur est disponible, et comment l'IDE de Visual Studio est configuré pour prendre en charge le concepteur (par exemple qui la catégorie ou l'onglet de boîte à outils est disponible).
Kit de développement logiciel Visual Studio fournit plusieurs mécanismes pour simplifier le contrôle d'une initialisation du concepteur ou du composant de concepteur et la manipulation de ses métadonnées par un VSPackage.
initialiser des métadonnées et des données de configuration
Étant donné qu'ils sont chargés à la demande, les VSPackages ne peut avoir chargé par l'environnement de Visual Studio avant l'instanciation d'un concepteur. Par conséquent, les VSPackages ne peut pas utiliser le mécanisme standard pour configurer un concepteur ou un composant de concepteur sur la conception, qui consiste à gérer un événement d'DesignerCreated . À la place, un VSPackage implémente une instance de l'interface d' DesignSurfaceExtension et s'inscrit pour fournir des personnalisations, appelées extensions d'aire de conception.
personnaliser l'initialisation
Personnaliser un concepteur, un composant, ou une aire du concepteur, implique :
Modifiant les métadonnées de concepteur et efficacement modifiant le mode certain Type est inaccessible ou converti.
Cela est généralement fait via les mécanismes d' UITypeEditor ou d' TypeConverter .
Par exemple, lorsque les concepteurs basés sur d' System.Windows.Formssont initialisés, l'environnement de Visual Studio modifie UITypeEditor pour les objets d' Image utilisés avec le concepteur pour utiliser le gestionnaire des ressources pour obtenir des bitmaps plutôt que le système de fichiers.
Intégration avec l'environnement, par exemple, l'abonnement aux événements ou en obtenant les informations de configuration de projet. Vous pouvez obtenir des informations de configuration de projet et s'abonner aux événements en obtenant l'interface d' ITypeResolutionService .
Modification de l'environnement utilisateur en permettant aux catégories appropriées de boîte à outils ou en restreignant l'applicabilité du concepteur en appliquant une instance de la classe d' ToolboxItemFilterAttribute vers le concepteur.
Initialisation de concepteur d'un VSPackage
Un VSPackage doit traiter l'initialisation du concepteur par :
Créer un objet qui implémente la classe d' DesignSurfaceExtension .
Notes
La classe d' DesignSurfaceExtension ne doit jamais être implémentée sur le même objet que la classe d' Package .
Enregistrez la classe implémentant DesignSurfaceExtension en fournissant la prise en charge pour les extensions de concepteur du VSPackage en appliquant des instances d' DesignSurfaceExtensionAttribute, d' ProvideObjectAttribute et d' ProvideServiceAttribute à la classe qui fournit l'implémentation du VSPackage d' Package.
Chaque fois que tout concepteur ou composant de concepteur est créé, l'environnement de Visual Studio :
Accède à chaque fournisseur stocké d'extension de l'aire de conception.
Le instancie et initialise une instance d'objet d' DesignSurfaceExtension de chaque d'aire de conception fournisseur d'extension
Appelle la méthode de l' OnDesignerCreated de chaque d'aire de conception fournisseur d'extension ou la méthode d' OnComponentCreated (si nécessaire).
En implémentant l'objet d' DesignSurfaceExtension en tant que membre d'un VSPackage, il est important de comprendre que :
L'environnement de Visual Studio ne fournit aucun contrôle de les métadonnées ou autre les paramètres de configuration d'un fournisseur d' DesignSurfaceExtension spécifique à modifier. Il est possible pour deux fournisseurs ou plus d' DesignSurfaceExtension modifiant les mêmes fonctionnalités du concepteur des manières différentes, à la modification finale est définitive. Elle est indéterminé que la modification est en dernier appliqué.
Il est possible de restreindre explicitement une implémentation de l'objet d' DesignSurfaceExtension aux concepteurs spécifiques, en appliquant des instances d' ToolboxItemFilterAttribute à cette implémentation. Pour plus d'informations sur l'élément de boîte à outils filtrage, consultez ToolboxItemFilterAttribute et l' ToolboxItemFilterType.
Configurer supplémentaire de métadonnées
Un VSPackage peut modifier la configuration d'un concepteur ou d'un composant de concepteur autre qu'au moment de le design.
La classe d' ProvideDesignerMetadataAttribute peut être utilisée par programmation, ou doit être appliquée à un VSPackage fournissant un concepteur.
une instance de la classe d' ProvideDesignerMetadataAttribute est utilisée pour modifier les métadonnées des composants créés sur une aire de conception. Par exemple, il pourrait remplacer l'Explorateur de propriétés par défaut utilisé par les objets d' CommonDialog , par l'Explorateur de propriétés personnalisé.
Les modifications fournies par l'instance d' ProvideDesignerMetadataAttribute avez appliqués à l'implémentation d'un VSPackage d' Package peuvent avoir une des deux portées :
global -- pour toutes les instances d'un composant donné
Local -- concerner uniquement l'instance du composant créé sur une aire de conception a fourni par le VSPackage actuel.
la propriété d' IsGlobal de l'instance d' ProvideDesignerMetadataAttribute appliquée à l'implémentation d'un VSPackage d' Package détermine cette portée.
Appliquer l'attribut à une implémentation d' Package avec la propriété d' IsGlobal du jeu d'objets d' ProvideDesignerMetadataAttribute à true, comme ci-dessous, modifie le navigateur de l'environnement entier de Visual Studio :
[ProvideDesignerMetadata(typeof(Color), typeof(CustomBrowser), IsGlobal=true)]
internal class MyPackage : Package {}
Si l'indicateur global a été définie à false, la modification de métadonnées est locale au concepteur actuel pris en charge par le VSPackage actuel :
[ProvideDesignerMetadata(typeof(Color), typeof(CustomBrowser), IsGlobal=false)]
internal class MyPackage : Package {}
Notes
À l'heure actuelle, l'aire de conception prend uniquement en charge la création de composants, et donc que les composants peuvent avoir des métadonnées locales.Dans l'exemple ci-dessus, nous tentions de modifier une propriété, par exemple la propriété d' Color d'un objet.Si false a été passé pour l'indicateur global, CustomBrowser n'apparaîtrait jamais parce que le concepteur crée jamais en fait une instance d' Color.Définir l'indicateur global à false est utile pour les composants, tels que les contrôles, les minuteries, les boîtes de dialogue.
Voir aussi
Référence
DesignSurfaceExtensionAttribute