Freigeben über


Designer-Initialisierung und Metadatenkonfiguration

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 kann VSPackages nicht den Standardmechanismus zum Konfigurieren einer Designer- oder Designerkomponente bei der Erstellung verwenden, was das Behandeln eines DesignerCreated-Ereignisses ist. 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:

  1. Durch Ändern der Designer-Metadaten wird effektiv geändert, wie auf ein bestimmtes Type zugegriffen oder es konvertiert wird.

    Dies erfolgt in der Regel über die UITypeEditor oder TypeConverter-Mechanismen.

    Wenn beispielsweise System.Windows.Forms-basierte Designer initialisiert werden, ändert die Visual Studio-Umgebung die UITypeEditor für Image Objekte, die mit dem Designer verwendet werden, um Bitmaps anstelle des Dateisystems abzurufen.

  2. 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.

  3. Ä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 durch:

  1. Erstellen eines Objekts, das die DesignSurfaceExtension Klasse implementiert.

    Hinweis

    Die DesignSurfaceExtension Klasse sollte niemals für dasselbe Objekt wie die Package Klasse implementiert werden.

  2. Registrieren der Klasse, die DesignSurfaceExtension implementiert, als Unterstützung für die Designererweiterungen des VSPackage. Registrieren Sie die Klasse, indem Sie Instanzen von DesignSurfaceExtensionAttribute, ProvideObjectAttributeund ProvideServiceAttribute auf die Klasse anwenden, die die Implementierung von PackageVSPackage bereitstellt.

Immer wenn eine Designer- oder Designerkomponente erstellt wird, wird die Visual Studio-Umgebung:

  • Greift auf jeden registrierten Designoberflächenerweiterungsanbieter zu.

  • Instanziiert und initialisiert eine Instanz des Objekts jedes Entwurfsoberflächenerweiterungsanbieters DesignSurfaceExtension .

  • Ruft die Methode OnDesignerCreated oder OnComponentCreated (je nach Bedarf) jedes Entwurfsoberflächenerweiterungsanbieters auf.

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 DesignSurfaceExtension Anbieter ändert. Es ist möglich, dass zwei oder mehr DesignSurfaceExtension Anbieter 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 explizit auf bestimmte Designer zu beschränken, indem Instanzen ToolboxItemFilterAttribute dieser Implementierung angewendet werden. Weitere Informationen zum Filtern von Toolbox-Elementen finden Sie unter ToolboxItemFilterAttribute und ToolboxItemFilterType.

Zusätzliche Metadatenbereitstellung

Ein VSPackage kann die Konfiguration einer anderen Designer- oder Designerkomponente als zur Entwurfszeit ä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 ersetzt werden, der von CommonDialog-Objekten mit einem benutzerdefinierten Eigenschaftenbrowser verwendet wird.

Änderungen, die von einer Instanz bereitgestellt werden, die ProvideDesignerMetadataAttribute auf die Implementierung Package eines VSPackage-Elements angewendet wird, 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 IsGlobal Eigenschaft der ProvideDesignerMetadataAttribute-Instanz, die auf die Implementierung eines VSPackage von Package angewendet wird, bestimmt diesen Bereich.

Wenn Sie das Attribut auf eine Implementierung von Package anwenden, wobei die Eigenschaft IsGlobal des Objekts ProvideDesignerMetadataAttribute auf truegesetzt ist, wie unten, ändert sich der Browser für die gesamte Visual Studio-Umgebung:

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

internal class MyPackage : Package {}

Wenn das globale Flag auf falsefestgelegt wurde, dann ist die Metadatenänderung lokal für den aktuellen Designer, 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 nie angezeigt, CustomBrowser da der Designer nie tatsächlich eine Instanz von Colorerstellt. Das Festlegen der globalen Flag false ist für Komponenten wie Steuerelemente, Zeitgeber und Dialogfelder nützlich.