Compartilhar via


Fornecimento de metadados de tempo de design

Quando você criar design personalizado experiências para o seu controle WPF ou do Silverlight , a implantar -los em assemblies de tempo de design separada-. Você especificar como essas implementações de tempo de design personalizado-interagem com as ferramentas, como Visual Studio e o Expression Blend, criando uma tabela que é preenchida com os atributos de metadados .

Assemblies de tempo de design-

Quando um projeto de ferramenta, como Visual Studio, abre o seu controle personalizadodo assembly, ele também procura assemblies de tempo de design relacionada-. Em particular, uma ferramenta de design procura o ProvideMetadataAttribute assembly-nível de atributo. Quando esse atributo é encontrado, o designer de pesquisa de assembly para uma classe que implementa o IProvideAttributeTable interface. As designer de consultas a AttributeTablepropriedade dessa classe para umacoleção de atributoque especifica o comportamento de tempo de design-. Para obter mais informações, consulte Passo a passo: Fornecendo metadados de tempo de design personalizados e Implantando um controle personalizado e assemblies de tempo de design.

Tabela de atributos

O deAttributeTableclasse associa atributos de metadados de tempo de design-a tipos WPF e Silverlight . A tabela de atributo Especifica uma implementação de tempo de design específico-para um tipo projetáveis. Por exemplo, se você tiver um personalizado AdornerPanel para o seu controle, você adicionar um FeatureAttribute para a tabela de atributo para especificar um personalizado FeatureProvider de implementação.

Construtor de atributo tabela

To create an attribute table, you start by creating an instance of the AttributeTableBuilder class. Adicionar metadados ao construtor de atributo de tabela, chamando o AddCustomAttributes método. Quando terminar de adicionar metadados, você produzir uma tabela de atributo , chamando o CreateTable método. The attribute table builder methods support callback delegates, so the creation of the attribute table can be deferred until needed.

O código a seguir mostra como especificar uma implementação de adorno personalizado usando uma tabela de atributo .

' Container for any general design-time metadata to initialize.
' Designers look for a type in the design-time assembly that 
' implements IProvideAttributeTable. If found, designers instantiate
' this class and access its AttributeTable property automatically.
Friend Class Metadata
    Implements IProvideAttributeTable

    ' Accessed by the designer to register any design-time metadata.
    Public ReadOnly Property AttributeTable() As AttributeTable _
        Implements IProvideAttributeTable.AttributeTable
        Get
            Dim builder As New AttributeTableBuilder()

            ' Add the adorner provider to the design-time metadata.
            builder.AddCustomAttributes(GetType(ButtonWithDesignTime), _
                                        New FeatureAttribute(GetType(OpacitySliderAdornerProvider)))

            Return builder.CreateTable()
        End Get
    End Property


End Class
// Container for any general design-time metadata to initialize.
// Designers look for a type in the design-time assembly that 
// implements IProvideAttributeTable. If found, designers instantiate 
// this class and access its AttributeTable property automatically.
internal class Metadata : IProvideAttributeTable
{
    // Accessed by the designer to register any design-time metadata.
    public AttributeTable AttributeTable
    {
        get 
        {
            AttributeTableBuilder builder = new AttributeTableBuilder();

            // Add the adorner provider to the design-time metadata.
            builder.AddCustomAttributes(
                typeof(ButtonWithDesignTime),
                new FeatureAttribute(typeof(OpacitySliderAdornerProvider)));

            return builder.CreateTable();
        }
    }
}

For more information, see Walkthrough: Criando um adorno em tempo de design.

Tempo de Design-fluxo de trabalho de implementação básico

Você geralmente seguem um fluxo de trabalho de semelhante durante a criação de experiências de design personalizado. For more information, see Como: Implantar um controle personalizado e assemblies de tempo de design.

Para obter exemplos que mostram como implementar um design personalizado-experiências de tempo, consulte WPF e Silverlight exemplos de extensibilidade de Designer.

Vantagens de Assemblies de tempo de Design separada-

The WPF Designer for Visual Studio framework decouples design-time metadata from implementation. Separar os metadados do controle do código é um princípio de design importantes pelos seguintes motivos de tempo de-de execução.

  • Compilação turn-ao redor e logística de integração entre as equipes pode fazer compilação metadados no controle complicado.

  • Compilação de metadados no controle impede ferramentas externas, como o WPF Designer ou o Expression Blend, modifique os metadados mais tarde. This is a key issue for agility. Sem separação de tempo de design- metadados de controle, Visual Studio não é possível versão seus designers sem a necessidade de uma nova versão do .NET Framework.

  • A compilação de metadados no controle significativamente aumenta o tamanho do assemblyde controle. Os atributos de tempo de design-também mais lento o controle. Recursos de controle, tais como vinculação de dados, que usa a reflexão, são afetados como atributos adicionais são carregados na memória.

  • Tempo de design- metadados fornece a "personalidade" do designer. Os recursos de um designer amplamente estão ligados ao aplicativo que hospeda-lo, não o controle. WPF Designere o Expression Blend usar conjuntos diferentes de metadados para fornecer um conjunto de recurso destina-se um tipo específico de usuário.

Consulte também

Referência

AttributeTable

ProvideMetadataAttribute

Outros recursos

Como: Implantar um controle personalizado e assemblies de tempo de design

Implantando um controle personalizado e assemblies de tempo de design

Conceitos básicos de extensibilidade

Noções básicas sobre extensibilidade Designer WPF