Bereitstellen eines benutzerdefinierten Steuerelements und von Entwurfszeitassemblys
Wenn ein Entwurfstool die Assembly des benutzerdefinierten Steuerelements öffnet, sucht es auch nach verwandten Entwurfszeitassemblys. Speziell suchen Designer nach Assemblys, die über das ProvideMetadataAttribute-Attribut auf Assemblyebene verfügen. Wenn dieses Attribut gefunden wird, sucht der Designer in der Assembly nach einer Klasse, die die IProvideAttributeTable-Schnittstelle implementiert. Der Designer fragt die AttributeTable-Eigenschaft dieser Klasse nach einer Attributauflistung ab, die das Entwurfszeitverhalten angibt.
Benennungskonvention für Entwurfszeitassemblys
Entwurfstools wie Visual Studio und Expression Blend ermitteln die benutzerdefinierten Entwurfszeitassemblys mit einer Benennungskonvention. Diese Konvention hat sich in unterschiedlichen Toolversionen entwickelt. Benennen Sie die Assemblys mithilfe der folgenden Tabelle für die entsprechenden Ziel-Designer.
Zielumgebung |
Namenskonvention |
Beispielnamen |
---|---|---|
Expression Blend 3 und Visual Studio 2010 |
<Steuerelementbibliothek>.Design.<Version>.dll (Allgemein) <Steuerelementbibliothek>.Expression.Design.<Version>.dll (Expression Blend) <Steuerelementbibliothek>.VisualStudio.Design.<Version>.dll (Visual Studio) |
TailspinToysControls.Design.4.0.dll TailspinToysControls.Expression.Design.4.0.dll TailspinToysControls.VisualStudio.Design.4.0.dll |
Expression Blend 2 und Visual Studio 2008 |
<Steuerelementbibliothek>.Design.dll (Allgemein) <Steuerelementbibliothek>.Expression.Design.dll (Expression Blend) <Steuerelementbibliothek>.VisualStudio.Design.dll (Visual Studio) |
TailspinToysControls.Design.dll TailspinToysControls.Expression.Design.dll TailspinToysControls.VisualStudio.Design.dll |
Allgemein bezieht sich auf Entwurfszeitimplementierungen, die von Visual Studio und Expression Blend gemeinsam genutzt werden. Die Teilzeichenfolge <Version> gibt die entsprechende Version des WPF-Designer-Frameworks an. Sie können dies überprüfen, indem Sie die Version der Microsoft.Windows.Design.dll-Assembly überprüfen.
Toolspezifische Entwurfszeitassemblys können die gemeinsam genutzte Implementierung in der allgemeinen Assembly überschreiben. Dies bedeutet, dass die benutzerdefinierte Entwurfsumgebung in anderen Entwurfstools ganz anders sein kann. Weitere Informationen finden Sie unter Bereitstellen von Entwurfszeitmetadaten.
Registrieren von Entwurfszeitassemblys
Registrieren Sie das Steuerelement und die zugeordneten Entwurfszeitassemblys mit dem Verfahren zur Assemblyordnerregistrierung, das auch AssemblyFoldersEx-Registrierung genannt wird. Um Steuerelemente mit dem Verfahren zur Assemblyordnerregistrierung zu registrieren, müssen nur Steuerelementassemblys auf dem Datenträger vorhanden und Toolboxregistrierungseinträge angegeben sein. Dieses Registrierungsverfahren erfolgt möglicherweise vor oder nach der Installation von Visual Studio.
AssemblyFoldersEx ist ein Registrierungsschlüssel unter jeder Zielframeworkversion, z. B. Silverlight 3 oder .NET Framework 4. AssemblyFoldersEx umfasst einen Satz von Schlüsseln, der Ordner angibt, die frameworkspezifische Assemblys enthalten. Für eine Festlegung auf Silverlight 3 befindet sich der AssemblyFoldersEx-Registrierungsschlüssel z. B. im folgenden Registrierungspfad.
[HKCU oder HKLM]\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Silverlight\v3.0\AssemblyFoldersEx
Wenn der Toolbox-Unterschlüssel und die unterstützenden Einträge unter einem AssemblyFoldersEx-Schlüssel erstellt werden, werden Steuerelemente in der Toolbox, dem Dialogfeld Verweise hinzufügen und dem Dialogfeld Elemente auswählen angezeigt.
In der folgenden Tabelle sind die Registrierungseinträge aufgeführt, die in den Schlüsseln AssemblyFoldersEx und Toolbox verwendet werden können, um einen Assemblyordner zu registrieren.
Registrierungseintrag |
Registrierungseintragstyp |
Beschreibung |
Beispiel |
---|---|---|---|
<assembly> |
Schlüssel |
Der Name des Schlüssels, normalerweise mit Branding. |
[TailspinToys Controls] |
<Assemblyordner> |
Standardzeichenfolgenwert |
Gibt den vollständigen Installationspfad für die Assembly des benutzerdefinierten Steuerelements an. Designer suchen nach Entwurfszeitassemblys in diesem Ordner und einem Unterordner mit dem Namen Design. |
@ = "c:\\Programme\\Reference Assemblies\\TailspinToys Controls\\Bin \\" |
Toolbox |
Schlüssel |
Fügen Sie den Toolbox-Schlüssel hinzu, wenn die Assemblys in <Assemblyordner> nach Steuerelementen durchsucht werden sollen, die der Toolbox hinzugefügt werden sollen. Wenn dieser Schlüssel nicht angegeben wird, werden Steuerelemente im Dialogfeld Elemente auswählen und Assemblys im Dialogfeld Verweis hinzufügen angezeigt, aber nicht in der Toolbox. |
[Toolbox] |
TabName |
Zeichenfolgenwert |
Gibt die standardmäßige Toolboxgruppe für Steuerelemente in <Assemblyordner> an. Falls die Gruppe noch nicht vorhanden ist, wird sie erstellt. Wenn der Wert nicht angegeben wird, werden Steuerelemente in der Standardgruppe für die Plattform installiert. Verwenden Sie diesen Wert, um eine Marke statt einer funktionalen Kategorie anzugeben. Richten Sie die Kategorien Allgemein und Alle Steuerelemente nicht auf benutzerdefinierte WPF- und Silverlight- Steuerelemente aus. Der Wert kann nicht lokalisiert werden. |
"TabName"="TailspinToys" |
Servicing |
Schlüssel |
Um eine Toolboxcacheaktualisierung zu erzwingen, geben Sie im Toolbox-Schlüssel einen neuen Schlüssel oder Wert an. Es empfiehlt sich, hierzu einen Updates-Unterschlüssel zu erstellen, der einen Registrierungswert für jedes installierte Update enthält. Die Cacheaktualisierung gilt nur für die Steuerelemente in dem Ordner, zum dem der Toolbox-Schlüssel gehört, nicht für alle Frameworksteuerelemente. Die Toolboxanpassungen des Benutzers für die Steuerelemente eines Assemblyordners gehen möglicherweise verloren, wenn der Assemblyordner aktualisiert wird. |
[Updates] "Update3"="1" "Update7"="1" |
Das folgende Beispielregistrierungsskript registriert Assemblys, die auf die Version .NET Framework 4 festgelegt sind und sich im Pfad mit Verweisassemblys befinden. Alle Steuerelemente, deren ToolboxBrowsableAttribute auf true festlegt ist, werden in der Toolbox unter der Registerkarte Tailspin Toys angezeigt.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0\AssemblyFoldersEx\TailspinToys]
@="c:\\\\Program Files\\\\Reference Assemblies\\\\TailspinToys Controls\\\\Bin\\\\"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0\AssemblyFoldersEx\TailspinToys\Toolbox]
"TabName"="Tailspin Toys"
ToolboxBrowsableAttribute und der Toolboxregistrierungsschlüssel
Sie geben an, ob das benutzerdefinierte Steuerelement in der Toolbox angezeigt wird, indem Sie den Entwurfszeitmetadaten des Steuerelements das ToolboxBrowsableAttribute hinzufügen. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Bereitstellen von Metadaten für Toolboxsymbole.
Das Dialogfeld Elemente auswählen dient zur Suche nach neuen Assemblys und zum Hinzufügen von neuen Steuerelementen zur Toolbox. Die folgende Tabelle zeigt, wie die Interaktion zwischen dem ToolboxBrowsableAttribute und dem Toolbox-Registrierungsschlüssel bestimmt, wann das benutzerdefinierte Steuerelement in der Toolbox und im Dialogfeld Elemente auswählen angezeigt wird.
Toolbox-Registrierungsschlüssel |
Kein Toolbox-Registrierungsschlüssel |
|
ToolboxBrowsable = true |
|
|
ToolboxBrowsable = false |
|
|
Laden von Entwurfszeitassemblys
Designer laden die benutzerdefinierten Entwurfszeitassemblys in einer bestimmten Reihenfolge. Dadurch können designerspezifische Implementierungen generische Implementierungen ersetzen. Für ein benutzerdefiniertes Steuerelement, das in einer Assembly mit dem Namen ControlLibrary.dll bereitgestellt wird, zeigt die folgende Liste die Reihenfolge, in der Entwurfszeitassemblys geladen werden.
ControlLibrary.dll (Steuerelementassembly)
ControlLibrary.Design.<Version>.dll
Design\ControlLibrary.Design.<Version>.dll
ControlLibrary.[Expression|VisualStudio].Design.<Version>.dll
Design\ControlLibrary.[Expression|VisualStudio].Design.<Version>.dll
Designerspezifische Assemblys ersetzen die Implementierungen, die in generischen Assemblys bereitgestellt werden. TailspinToysControlLibrary.VisualStudio.Design.dll kann z. B. Implementierungen in TailspinToysControlLibrary.Design.dll ersetzen.
Außerdem wird eine Entwurfszeitassembly nach der <Version> geladen, die im Dateinamen angegeben ist. Die folgenden Regeln zeigen, wie <Version> von einem Designer interpretiert wird.
Wenn <Version> eine andere Hauptversionsnummer als die Frameworkversion des Designers aufweist, wird die Entwurfsassembly nicht geladen.
Wenn mehr als eine Entwurfszeitassembly mit der Frameworkversion des Designers kompatibel ist, lädt der Designer die Version, die für die höchste Frameworkversion kompiliert wurde. Die Frameworkversion des Designers ist also nicht niedriger.
In der folgenden Tabelle wird ein Beispiel für einen Designer gezeigt, der mit der Frameworkversion 4.1.3.0 erstellt wurde und vier Entwurfszeitassemblys mit unterschiedlichen Versionen lädt.
Beispiel für den Namen einer Entwurfszeitassembly |
Was lädt der Designer? |
---|---|
ControlLibrary.Design.3.0.1.0.dll |
Nein. Version ist inkompatibel. |
ControlLibrary.Design.4.0.1.0.dll |
Nein. Würde er laden, aber eine höhere Version ist verfügbar. |
ControlLibrary.Design.4.1.1.0.dll |
Ja. Der Version des Designers am nächsten. |
ControlLibrary.Design.4.3.dll |
Nein. Erstellt für eine höhere Frameworkversion als der Designer. |
Aktualisieren der Toolbox
Wenn Sie Assemblys in vom AssemblyFoldersEx-Schlüssel angegebenen Ordnern aktualisieren, müssen Sie möglicherweise den Visual Studio-Toolboxcache aktualisieren. Der Cache enthält die Namen, Kategorien und Symbole für Steuerelemente, die in der Toolbox angezeigt werden. Der Cache enthält keine Steuerelement- oder Entwurfszeitassemblys. Beim Kompilieren von Projekten werden alle verarbeiteten Steuerelement- oder Entwurfszeitassemblys automatisch aktualisiert.
Der Toolboxcache für einen Assemblyordner wird aktualisiert, wenn ein AssemblyFoldersEx-Schlüssel geändert wird (einer der Werte oder Unterschlüssel wird geändert). Die Aktualisierung erfolgt bei der Toolboxinitialisierung, wenn der Aufgabenbereich Toolbox zum ersten Mal angezeigt wird (in der Regel beim Starten oder Laden von Projekten in Visual Studio).
Um eine Toolboxcacheaktualisierung zu erzwingen, geben Sie im Toolbox-Schlüssel einen neuen Schlüssel oder Wert an. Es empfiehlt sich, hierzu einen Servicing-Unterschlüssel zu erstellen, der einen Registrierungswert für jedes installierte Update enthält. Die Cacheaktualisierung gilt nur für die Steuerelemente in dem Ordner, zum dem der Toolbox-Schlüssel gehört, nicht für alle Frameworksteuerelemente. Die Toolboxanpassungen des Benutzers für die Steuerelemente eines Assemblyordners gehen möglicherweise verloren, wenn der Assemblyordner aktualisiert wird.