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
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.
En el archivo de metadatos, agregue una clase que implemente IRegisterMetadata e implemente el método Register.
Cree instancias de un objeto AttributeTableBuilder y llame al método AddCustomAttributes para agregarle los atributos.
Llame al método AddAttributeTable para agregar AttributeTable al almacén de metadatos.
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
Referencia
Otros recursos
Conceptos de extensibilidad básica