Compartir a través de


Cómo: Utilizar el almacén de metadatos

Actualización: noviembre 2007

Cuando se usa la extensibilidad para personalizar Windows Presentation Foundation (WPF) Designer for Visual Studio, normalmente se crean controles personalizados. El código de los controles y los metadatos que definen el comportamiento en tiempo de diseño de los controles se dividen en ensamblados independientes. Los metadatos se dividen en MetadataStore. Para obtener más información, vea Arquitectura de extensibilidad de WPF Designer.

El almacén de metadatos contiene información sobre el comportamiento en tiempo de diseño, por ejemplo, adornos personalizados, menús contextuales personalizados y editores de propiedades personalizados. El almacén de metadatos se implementa en forma de tablas de atributos basadas en código.

Nota:

Los ensamblados de metadatos se cargan en el orden siguiente: primero *.Design.dll y segundo *.VisualStudio.Design.dll o *.Expression.Design.dll. Esto permite a los metadatos específicos del diseñador invalidar los metadatos compartidos comunes.

Agregar tablas de atributos personalizadas al almacén de metadatos

Cuando un diseñador carga un control personalizado, busca un tipo en el ensamblado en tiempo de diseño correspondiente que implementa IRegisterMetadata. Si lo encuentra, crea instancias del tipo y llama a su método Register automáticamente.

Para agregar tablas de atributos personalizadas al almacén de metadatos

  1. En el ensamblado en tiempo de diseño general de su control (<Su control>.Design.dll), agregue un archivo denominado Metadata.cs o Metadata.vb.

  2. En el archivo de metadatos, agregue una clase que implemente IRegisterMetadata e implemente el método Register.

  3. Cree instancias de un objeto AttributeTableBuilder y llame al método AddCustomAttributes para agregarle los atributos.

  4. Llame al método AddAttributeTable para agregar AttributeTable al almacén de metadatos.

  5. Repita los pasos del 1 al 4 para el ensamblado en tiempo de diseño específico de Visual Studio (<Su control>.VisualStudio.Design.dll).

Ejemplo

En el ejemplo siguiente se agregan los metadatos para un control personalizado. El código conecta un editor de propiedades personalizado con una propiedad del control personalizado.

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

En el ejemplo siguiente se agregan los metadatos para un control personalizado. El código conecta adornos personalizados y un menú contextual personalizado con el control personalizado.

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

Vea también

Conceptos

Almacén de metadatos

Referencia

AdornerProvider

ContextMenuProvider

Otros recursos

Conceptos de extensibilidad básica

Introducción a la extensibilidad de WPF Designer

Extensibilidad de WPF Designer