Gewusst wie: Verwenden des Metadatenspeichers
Aktualisiert: November 2007
Wenn Sie den Windows Presentation Foundation (WPF)-Designer für Visual Studio mithilfe der Erweiterbarkeit anpassen, ist es häufig notwendig, benutzerdefinierte Steuerelemente zu erstellen. Der Code für die Steuerelemente und die Metadaten zur Definition des Entwurfszeitverhaltens der Steuerelemente wird separaten Assemblys zugeordnet. Die Metadaten werden dem MetadataStore zugeordnet. Weitere Informationen finden Sie unter Erweiterbare Architektur des WPF-Designers.
Der Metadatenspeicher enthält Informationen zum Entwurfszeitverhalten, beispielsweise zu benutzerdefinierten Adornern, benutzerdefinierten Kontextmenüs und benutzerdefinierten Eigenschaften-Editoren. Der Metadatenspeicher wird in Form von codebasierten Attributtabellen implementiert.
Hinweis: |
---|
Metadatenassemblys werden in der folgenden Reihenfolge geladen: zunächst *.Design.dll, dann *.VisualStudio.Design.dll oder *.Expression.Design.dll. Daher können die für einen Designer spezifischen Metadaten die gemeinsam genutzten Metadaten überschreiben. |
Hinzufügen von benutzerdefinierten Attributtabellen zum Metadatenspeicher
Wenn ein Designer ein benutzerdefiniertes Steuerelement lädt, sucht er nach einem Typ in der entsprechenden Entwurfszeitassembly, der IRegisterMetadata implementiert. Wenn dieser Typ gefunden wird, wird er instanziiert und seine Register-Methode automatisch aufgerufen.
So fügen Sie benutzerdefinierte Attributtabellen zum Metadatenspeicher hinzu
Fügen Sie in der allgemeinen Entwurfszeitassembly für das Steuerelement (<Your Control>.Design.dll) eine Datei mit dem Namen Metadata.cs oder Metadata.vb hinzu.
Fügen Sie in der Metadatendatei eine Klasse hinzu, die IRegisterMetadata implementiert, und implementieren Sie die Register-Methode.
Instanziieren Sie ein AttributeTableBuilder-Objekt, und rufen Sie die AddCustomAttributes-Methode auf, um dem Objekt die Attribute hinzuzufügen.
Rufen Sie die AddAttributeTable-Methode auf, um die AttributeTable zum Metadatenspeicher hinzuzufügen.
Wiederholen Sie die Schritte 1 bis 4 für die Visual Studio-spezifische Entwurfszeitassembly (<Your Control>.VisualStudio.Design.dll).
Beispiel
Im folgenden Beispiel werden Metadaten für ein benutzerdefiniertes Steuerelement hinzugefügt. Der Code verbindet einen benutzerdefinierten Eigenschaften-Editor mit einer Eigenschaft des benutzerdefinierten Steuerelements.
internal class Metadata : Microsoft.Windows.Design.Metadata.IRegisterMetadata
{
public void Register()
{
Microsoft.Windows.Design.Metadata.AttributeTableBuilder builder = new Microsoft.Windows.Design.Metadata.AttributeTableBuilder();
//Property Editor
builder.AddCustomAttributes(typeof(<Your Custom Control>), <Property>, new System.ComponentModel.EditorAttribute(typeof(<Your Custom Editor>), typeof(<Your Custom Editor>)));
//Category Editor
builder.AddCustomAttributes(typeof(<Your Custom Control>), new System.ComponentModel.EditorAttribute(typeof(<Your Custom Editor>), typeof(<Your Custom Editor>)));
Microsoft.Windows.Design.Metadata.MetadataStore.AddAttributeTable(builder.CreateTable());
}
}
Friend Class Metadata
Implements Microsoft.Windows.Design.Metadata.IRegisterMetadata
Public Sub Register() Implements Microsoft.Windows.Design.Metadata.IRegisterMetadata.Register
Dim builder As New Microsoft.Windows.Design.Metadata.AttributeTableBuilder()
'Property Editor
builder.AddCustomAttributes(GetType(<Your Custom Control>), <Property>, New System.ComponentModel.EditorAttribute(GetType(<Your Custom Editor>), GetType(<Your Custom Editor>)))
'Category Editor
builder.AddCustomAttributes(GetType(<Your Custom Control>), New System.ComponentModel.EditorAttribute(GetType(<Your Custom Editor>), GetType(<Your Custom Editor>)))
Microsoft.Windows.Design.Metadata.MetadataStore.AddAttributeTable(builder.CreateTable())
End Sub
End Class
Im folgenden Beispiel werden Metadaten für ein benutzerdefiniertes Steuerelement hinzugefügt. Der Code verbindet benutzerdefinierte Adorner und ein benutzerdefiniertes Kontextmenü mit dem benutzerdefinierten Steuerelement.
internal class Metadata : Microsoft.Windows.Design.Metadata.IRegisterMetadata
{
public void Register()
{
Microsoft.Windows.Design.Metadata.AttributeTableBuilder builder = new Microsoft.Windows.Design.Metadata.AttributeTableBuilder();
//Adorners
builder.AddCustomAttributes(typeof(<Your Custom Control>), new Microsoft.Windows.Design.Features.FeatureAttribute(typeof(<Your Custom Adorner Provider>)));
builder.AddCustomAttributes(typeof(<Your Custom Control>), new Microsoft.Windows.Design.Features.FeatureAttribute(typeof(<Your Custom Adorner Provider>)));
//MenuActions
builder.AddCustomAttributes(typeof(<Your Custom Control>), new Microsoft.Windows.Design.Features.FeatureAttribute(typeof(<Your Custom Context Menu Provider>)));
Microsoft.Windows.Design.Metadata.MetadataStore.AddAttributeTable(builder.CreateTable());
}
}
Friend Class Metadata
Implements Microsoft.Windows.Design.Metadata.IRegisterMetadata
Public Sub Register() Implements Microsoft.Windows.Design.Metadata.IRegisterMetadata.Register
Dim builder As New Microsoft.Windows.Design.Metadata.AttributeTableBuilder()
'Adorners
builder.AddCustomAttributes(GetType(<Your Custom Control>), New Microsoft.Windows.Design.Features.FeatureAttribute(GetType(<Your Custom Adorner Provider>)))
builder.AddCustomAttributes(GetType(<Your Custom Control>), New Microsoft.Windows.Design.Features.FeatureAttribute(GetType(<Your Custom Adorner Provider>)))
'MenuActions
builder.AddCustomAttributes(GetType(<Your Custom Control>), New Microsoft.Windows.Design.Features.FeatureAttribute(GetType(<Your Custom Context Menu Provider>)))
Microsoft.Windows.Design.Metadata.MetadataStore.AddAttributeTable(builder.CreateTable())
End Sub
End Class