Sdílet prostřednictvím


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.

Bb514529.alert_note(de-de,VS.90).gifHinweis:

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

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

  2. Fügen Sie in der Metadatendatei eine Klasse hinzu, die IRegisterMetadata implementiert, und implementieren Sie die Register-Methode.

  3. Instanziieren Sie ein AttributeTableBuilder-Objekt, und rufen Sie die AddCustomAttributes-Methode auf, um dem Objekt die Attribute hinzuzufügen.

  4. Rufen Sie die AddAttributeTable-Methode auf, um die AttributeTable zum Metadatenspeicher hinzuzufügen.

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

Siehe auch

Konzepte

Metadatenspeicher

Referenz

AdornerProvider

ContextMenuProvider

Weitere Ressourcen

Grundlagen zu Erweiterungen

WPF-Designer-Erweiterbarkeit

WPF-Designer-Erweiterbarkeit