Como: Use o Repositório de Metadados

Quando você usa extensibilidade para personalizar o Windows Presentation Foundation (WPF) Designer for Visual Studio, você geralmente irá criar controles personalizados.O código para os controles e os metadados definindo a design-time behavior de seus controles é acrescentado em conjuntos separados.Os metadados é acrescentado no MetadataStore.Para obter mais informações, consulte Arquitetura de extensibilidade Designer WPF.

Este tópico contém informações sobre design-time behavior, como adorners personalizados, contexto personalizado menus e editores de propriedade personalizada.O armazenamento de metadados é implementado como tabelas atributo baseada em código.

Observação:

Metadados assemblies são carregados na seguinte ordem: *. Design.dll primeiro, *. VisualStudio.Design.dll ou *. expressão.Design.dll segundo.Isso permite metadados Designer-específicos substituir os metadados compartilhado comum.

Adicionar tabelas atributos personalizados ao armazenamento de metadados

Quando um designer carrega um controle personalizado, ele procura um tipo no assembly em tempo de design correspondente que implementa IRegisterMetadata.Se encontrado, ele instancia o tipo e chama o método Register automaticamente.

Adicionar tabelas atributos personalizados ao armazenamento de metadados

  1. No conjunto geral de tempo de design para o controle ( < O controle > .Design.dll), adicionar um arquivo chamado METADATA.cs ou METADATA.vb.

  2. No arquivo de metadados, adicionar uma classe que implementa IRegisterMetadata, e implementar o método Register.

  3. Criar instância de um objeto AttributeTableBuilder e chamar o método AddCustomAttributes para adicionar os atributos a ele.

  4. Chame o método AddAttributeTable para adicionar o AttributeTable armazenamento de metadados.

  5. Repita as etapas de 1 a 4 para o assembly Visual Studio-específicos em tempo de design ( < O controle > .VisualStudio.Design.dll).

Exemplo

O exemplo a seguir adiciona metadados para um controle personalizado.O código conecta um editor de propriedades personalizadas a uma propriedade da controle 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

O exemplo a seguir adiciona metadados para um controle personalizado.O código conecta adorners personalizados e um menu de contexto personalizado para o controle 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

Consulte também

Conceitos

Armazenamento de metadados

Referência

AdornerProvider

ContextMenuProvider

Outros recursos

Conceitos básicos de extensibilidade

Noções básicas sobre extensibilidade Designer WPF

Extensibilidade do WPF Designer