Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Manipulation der Metadaten und Filterattribute, die einer Designer- oder Designerkomponente zugeordnet sind, bietet einen Mechanismus für Anwendungen zum Definieren, welche Tools von einem bestimmten Designer verwendet werden, um unterschiedliche Type Objekte (z. B. Datenstrukturen, Klassen oder grafische Entitäten) zu verarbeiten, wenn der Designer verfügbar ist und wie die Visual Studio-IDE für die Unterstützung des Designers konfiguriert ist (z. B. welche Toolboxkategorie oder Registerkarte verfügbar ist).
Das Visual Studio SDK bietet mehrere Mechanismen, um die Steuerung der Initialisierung der Designer- oder Designerkomponente und die Manipulation der Metadaten durch ein VSPackage zu erleichtern.
Initialisieren von Metadaten und Konfigurationsinformationen
Da sie bei Bedarf geladen werden, wurden VSPackages möglicherweise nicht vor der Instanziierung eines Designers von der Visual Studio-Umgebung geladen. Daher können VSPackages nicht den Standardmechanismus zum Konfigurieren einer Designer- oder Designerkomponente bei der Erstellung verwenden, indem ein DesignerCreated-Ereignis behandelt wird. Stattdessen implementiert ein VSPackage eine Instanz der DesignSurfaceExtension Schnittstelle und registriert sich selbst, um Anpassungen bereitzustellen, die als Designoberflächenerweiterungen bezeichnet werden.
Anpassen der Initialisierung
Das Anpassen eines Designers, einer Komponente oder einer Designeroberfläche umfasst Folgendes:
Ändern sie die Designermetadaten, und ändern Sie effektiv, wie auf eine bestimmte Type Datei zugegriffen oder konvertiert wird.
Dies erfolgt in der Regel über die UITypeEditor Mechanismen.TypeConverter
Wenn beispielsweise System.Windows.Forms-basierte Designer initialisiert werden, ändert die Visual Studio-Umgebung die UITypeEditor der mit dem Designer verwendeten Image-Objekte, um den Ressourcenmanager zu nutzen und Bitmaps anstelle des Dateisystems abzurufen.
Integration in die Umgebung, z. B. durch Abonnieren von Ereignissen oder Abrufen von Projektkonfigurationsinformationen. Sie können Projektkonfigurationsinformationen abrufen und Ereignisse abonnieren, indem Sie die ITypeResolutionService Schnittstelle abrufen.
Änderung der Benutzerumgebung durch Aktivieren geeigneter Toolboxkategorien oder durch Einschränken der Anwendbarkeit des Designers durch Anwenden einer Instanz der ToolboxItemFilterAttribute Klasse auf den Designer.
Designerinitialisierung durch ein VSPackage
Ein VSPackage sollte die Designerinitialisierung behandeln, indem:
Erstellen eines Objekts, das die DesignSurfaceExtension Klasse implementiert.
Hinweis
Die DesignSurfaceExtension Klasse sollte niemals für dasselbe Objekt wie die Package Klasse implementiert werden.
Registrieren der Klasse, die DesignSurfaceExtension implementiert, um Unterstützung für die Designererweiterungen von VSPackage bereitzustellen. Registrieren Sie die Klasse, indem Sie Instanzen von DesignSurfaceExtensionAttribute, ProvideObjectAttribute und ProvideServiceAttribute auf die Klasse anwenden, die die Implementierung von Package VSPackage bereitstellt.
Immer wenn eine Designer- oder Designerkomponente erstellt wird, reagiert die Visual-Studio-Umgebung:
Greift auf jeden registrierten Designoberflächenerweiterungsanbieter zu.
Instanziiert und initialisiert jeweils eine Instanz des Objekts des Entwurfsoberflächenerweiterungsanbieters DesignSurfaceExtension.
Ruft die OnDesignerCreated-Methode oder die OnComponentCreated-Methode des jeweiligen Entwurfsoberflächenerweiterungsanbieters auf (je nach Erfordernis).
Bei der Implementierung des DesignSurfaceExtension Objekts als Mitglied eines VSPackage ist es wichtig, folgendes zu verstehen:
Die Visual Studio-Umgebung bietet keine Kontrolle darüber, welche Metadaten oder andere Konfigurationseinstellungen ein bestimmter
DesignSurfaceExtensionAnbieter ändert. Es ist möglich, dass zwei oder mehrDesignSurfaceExtensionAnbieter dasselbe Designerfeature auf widersprüchliche Weise ändern, wobei die endgültige Änderung endgültig ist. Es ist unbestimmt, welche Änderung zuletzt angewendet wird.Es ist möglich, eine Implementierung des DesignSurfaceExtension Objekts auf bestimmte Designer zu beschränken, indem man Instanzen von ToolboxItemFilterAttribute auf diese Implementierung anwendet. Weitere Informationen zum Filtern von Toolbox-Elementen finden Sie unter ToolboxItemFilterAttribute und ToolboxItemFilterType.
Zusätzliche Metadatenbereitstellung
Ein VSPackage kann die Konfiguration eines Designers oder einer Designerkomponente außerhalb der Entwurfsphase ändern.
Die ProvideDesignerMetadataAttribute Klasse kann programmgesteuert oder auf ein VSPackage-Element angewendet werden, das einen Designer bereitstellt.
Eine Instanz der ProvideDesignerMetadataAttribute Klasse wird verwendet, um die Metadaten von Komponenten zu ändern, die auf einer Entwurfsoberfläche erstellt wurden. Beispielsweise könnte ein Standardeigenschaftenbrowser, der von CommonDialog Objekten verwendet wird, durch einen benutzerdefinierten Eigenschaftenbrowser ersetzt werden.
Änderungen, die von einer Instanz von ProvideDesignerMetadataAttribute bereitgestellt und auf die Implementierung von Package eines VSPackage-Elements angewendet werden, können einen von zwei Bereichen aufweisen:
Global – für alle neuen Instanzen einer bestimmten Komponente
Lokal – bezieht sich nur auf eine Instanz der Komponente, die auf einer Entwurfsoberfläche erstellt wurde, die vom aktuellen VSPackage bereitgestellt wird.
Die Eigenschaft IsGlobal der Instanz ProvideDesignerMetadataAttribute, die auf die Implementierung eines Package-VSPackages angewendet wird, bestimmt diesen Bereich.
Durch Anwenden des Attributs auf eine Implementierung von Package bei der die Eigenschaft IsGlobal des ProvideDesignerMetadataAttribute Objekts auf true gesetzt ist, wird der Browser für die gesamte Visual Studio-Umgebung geändert.
[ProvideDesignerMetadata(typeof(Color), typeof(CustomBrowser),
IsGlobal=true
)]
internal class MyPackage : Package {}
Wenn das globale Flag auf false gesetzt wurde, ist die Metadatenänderung lokal auf den aktuellen Designer beschränkt, der vom aktuellen VSPackage unterstützt wird.
[ProvideDesignerMetadata(typeof(Color), typeof(CustomBrowser),
IsGlobal=false
)]
internal class MyPackage : Package {}
Hinweis
Die Entwurfsoberfläche unterstützt nur das Erstellen von Komponenten, und daher können nur Komponenten lokale Metadaten aufweisen. Im obigen Beispiel haben wir versucht, eine Eigenschaft zu ändern, z. B. die Color Eigenschaft eines Objekts. Wenn false für die globale Kennzeichnung übergeben wurde, würde CustomBrowser nie angezeigt, da der Designer tatsächlich nie eine Instanz von Color erstellt. Das Festlegen der globalen Kennzeichnung false ist für Komponenten wie Steuerelemente, Zeitgeber und Dialogfelder nützlich.