Condividi tramite


Procedura: utilizzare l'archivio di metadati

Aggiornamento: novembre 2007

Quando si utilizza l'estensibilità per personalizzare Progettazione Windows Presentation Foundation (WPF) per Visual Studio, spesso si creano controlli personalizzati. Il codice per i controlli e i metadati che definiscono il comportamento in fase di progettazione dei controlli sono inseriti in assembly separati. I metadati sono inseriti in MetadataStore. Per ulteriori informazioni, vedere Architettura di estensibilità di Progettazione WPF.

L'archivio di metadati contiene informazioni sul comportamento in fase di progettazione, ad esempio in relazione a strumenti decorativi personalizzati, menu di scelta rapida personalizzati ed editor di proprietà personalizzati. L'archivio di metadati viene implementato sotto forma di tabelle di attributi basate sul codice.

Nota:

Gli assembly di metadati sono caricati nell'ordine seguente: prima *.Design.dll, poi *.VisualStudio.Design.dll o *.Expression.Design.dll. In questo modo i metadati specifici della finestra di progettazione possono eseguire l'override dei comuni metadati condivisi.

Aggiunta di tabelle di attributi personalizzate all'archivio di metadati

Quando in una finestra di progettazione viene caricato un controllo personalizzato, viene cercato un tipo nel corrispondente assembly Design-Time che implementa IRegisterMetadata. Se trovato, viene creata un'istanza del tipo e ne viene chiamato automaticamente il metodo Register.

Per aggiungere tabelle di attributi personalizzate all'archivio di metadati

  1. Nell'assembly Design-Time generale per il controllo (< Controllo >.Design .dll), aggiungere un file denominato Metadata.cs o Metadata.vb.

  2. Nel file di metadati aggiungere una classe che implementa IRegisterMetadata e implementare il metodo Register.

  3. Creare un'istanza di un oggetto AttributeTableBuilder e chiamare il metodo AddCustomAttributes per aggiungergli gli attributi.

  4. Chiamare il metodo AddAttributeTable per aggiungere AttributeTable all'archivio di metadati.

  5. Ripetere i passaggi da 1 a 4 per l'assembly Design-Time specifico di Visual Studio (<Controllo>.VisualStudio.Design.dll).

Esempio

Nell'esempio seguente vengono aggiunti dei metadati per un controllo personalizzato. Il codice connette un editor di proprietà personalizzato a una proprietà del controllo personalizzato.

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

Nell'esempio seguente vengono aggiunti dei metadati per un controllo personalizzato. Il codice connette strumenti decorativi visuali personalizzati e un menu di scelta rapida personalizzato al controllo personalizzato.

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

Vedere anche

Concetti

Archivio di metadati

Riferimenti

AdornerProvider

ContextMenuProvider

Altre risorse

Concetti di base sulla estensibilità

Informazioni sull'estensibilità Progettazione WPF

Estensibilità di Progettazione WPF