Inizializzazione e configurazione dei metadati della finestra di progettazione
La modifica dei metadati e degli attributi di filtro associati a una finestra di progettazione o a un componente della finestra di progettazione fornisce un meccanismo che consente alle applicazioni di definire quali strumenti vengono usati da una particolare finestra di progettazione per gestire oggetti diversi Type (ad esempio strutture di dati, classi o entità grafiche), quando la finestra di progettazione è disponibile e il modo in cui l'IDE di Visual Studio è configurato per supportare la finestra di progettazione (ad esempio la categoria o la scheda della casella degli strumenti disponibile).
Visual Studio SDK offre diversi meccanismi per facilitare il controllo dell'inizializzazione o del componente della finestra di progettazione di una finestra di progettazione e la modifica dei relativi metadati da un pacchetto VSPackage.
Inizializzare i metadati e le informazioni di configurazione
Poiché vengono caricati su richiesta, i pacchetti VSPackage potrebbero non essere stati caricati dall'ambiente di Visual Studio prima della creazione di istanze di una finestra di progettazione. Di conseguenza, i pacchetti VSPackage non possono usare il meccanismo standard per configurare una finestra di progettazione o un componente della finestra di progettazione durante la creazione, ovvero per gestire un DesignerCreated evento. Un VSPackage implementa invece un'istanza dell'interfaccia DesignSurfaceExtension e si registra per fornire personalizzazioni, dette estensioni dell'area di progettazione.
Personalizzare l'inizializzazione
La personalizzazione di una finestra di progettazione, di un componente o di un'area di progettazione comporta:
Modifica dei metadati della finestra di progettazione e modifica efficace della modalità di accesso o conversione di un determinato Type oggetto.
Questa operazione viene in genere eseguita tramite i UITypeEditor meccanismi o TypeConverter .
Ad esempio, quando System.Windows.Formsle finestre di progettazione basate su vengono inizializzate, l'ambiente di Visual Studio modifica per gli UITypeEditor Image oggetti usati con la finestra di progettazione per usare gestione risorse per ottenere bitmap anziché il file system.
L'integrazione con l'ambiente, ad esempio, sottoscrivendo eventi o ottenendo informazioni di configurazione del progetto. È possibile ottenere informazioni sulla configurazione del progetto e sottoscrivere gli eventi ottenendo l'interfaccia ITypeResolutionService .
Modifica dell'ambiente utente attivando le categorie appropriate della casella degli strumenti o limitando l'applicabilità della finestra di progettazione applicando un'istanza della ToolboxItemFilterAttribute classe alla finestra di progettazione.
Inizializzazione della finestra di progettazione da un pacchetto VSPackage
Un VSPackage deve gestire l'inizializzazione della finestra di progettazione in base a:
Creazione di un oggetto che implementa la DesignSurfaceExtension classe .
Nota
La DesignSurfaceExtension classe non deve mai essere implementata sullo stesso oggetto della Package classe .
Registrazione della classe che implementa DesignSurfaceExtension come supporto per le estensioni della finestra di progettazione del pacchetto VSPackage. Registrare la classe applicando istanze di DesignSurfaceExtensionAttribute, ProvideObjectAttributee ProvideServiceAttribute alla classe che fornisce l'implementazione di VSPackage di Package.
Ogni volta che viene creato un componente di progettazione o progettazione, l'ambiente di Visual Studio:
Accede a ogni provider di estensioni dell'area di progettazione registrato.
Crea un'istanza e inizializza un'istanza di ogni oggetto del provider di estensioni dell'area di DesignSurfaceExtension progettazione.
Chiama il metodo o il metodo o OnComponentCreated il metodo del provider di estensioni dell'area di OnDesignerCreated progettazione (in base alle esigenze).
Quando si implementa l'oggetto DesignSurfaceExtension come membro di un VSPackage, è importante comprendere che:
L'ambiente di Visual Studio non fornisce alcun controllo sui metadati o altre impostazioni di configurazione che un determinato
DesignSurfaceExtension
provider modifica. È possibile che due o piùDesignSurfaceExtension
provider modifichino la stessa funzionalità di progettazione in modi in conflitto, con la modifica finale definitiva. È indeterminato l'ultima modifica applicata.È possibile limitare in modo esplicito un'implementazione dell'oggetto DesignSurfaceExtension a finestre di progettazione specifiche applicando istanze di ToolboxItemFilterAttribute a tale implementazione. Per altre informazioni sul filtro degli elementi della casella degli strumenti , vedere e ToolboxItemFilterAttribute ToolboxItemFilterType.
Provisioning di metadati aggiuntivi
Un pacchetto VSPackage può modificare la configurazione di una finestra di progettazione o di un componente di progettazione diverso da in fase di progettazione.
La ProvideDesignerMetadataAttribute classe può essere usata a livello di codice o applicata a un pacchetto VSPackage che fornisce una finestra di progettazione.
Un'istanza della ProvideDesignerMetadataAttribute classe viene utilizzata per modificare i metadati dei componenti creati in un'area di progettazione. Ad esempio, è possibile sostituire un browser delle proprietà predefinito usato dagli CommonDialog oggetti con un visualizzatore di proprietà personalizzato.
Le modifiche fornite da un'istanza di ProvideDesignerMetadataAttribute applicata all'implementazione di un VSPackage di Package possono avere uno dei due ambiti seguenti:
Globale : per tutte le nuove istanze di un determinato componente
Locale- relativo solo all'istanza del componente creato in un'area di progettazione fornita dal VSPackage corrente.
La IsGlobal
proprietà dell'istanza ProvideDesignerMetadataAttribute applicata all'implementazione di un VSPackage di Package determina questo ambito.
L'applicazione dell'attributo a un'implementazione di Package con la IsGlobal proprietà dell'oggetto ProvideDesignerMetadataAttribute impostato su true
, come indicato di seguito, modifica il browser per l'intero ambiente di Visual Studio:
[ProvideDesignerMetadata(typeof(Color), typeof(CustomBrowser),
IsGlobal=true
)]
internal class MyPackage : Package {}
Se il flag globale è stato impostato su false
, la modifica dei metadati è locale nella finestra di progettazione corrente supportata dal VSPackage corrente:
[ProvideDesignerMetadata(typeof(Color), typeof(CustomBrowser),
IsGlobal=false
)]
internal class MyPackage : Package {}
Nota
L'area di progettazione supporta solo la creazione di componenti e pertanto solo i componenti possono avere metadati locali. Nell'esempio precedente si stava tentando di modificare una proprietà, ad esempio la Color
proprietà di un oggetto . Se false
è stato passato per il flag globale, CustomBrowser
non viene mai visualizzato perché la finestra di progettazione non crea mai un'istanza di Color
. L'impostazione del flag globale su false
è utile per i componenti, ad esempio controlli, timer e finestre di dialogo.