Condividi tramite


Aggiunta di metadati della fase di progettazione

Quando si creano esperienze di progettazione personalizzate per controlli WPF e Silverlight, queste vengono distribuite in assembly della fase di progettazione separati. Per specificare come queste implementazioni della fase di progettazione personalizzate interagiscono con gli strumenti, ad esempio con Visual Studio e con Expression Blend, si crea una tabella popolata con gli attributi dei metadati.

Assembly della fase di progettazione

Quando uno strumento di progettazione, quale Visual Studio, apre l'assembly del controllo personalizzato, cerca anche gli assembly della fase di progettazione correlati. In particolare, un strumento di progettazione cerca l'attributo ProvideMetadataAttribute a livello di assembly. Quando questo attributo viene individuato, la finestra di progettazione cerca nell'assembly una classe che implementa l'interfaccia IProvideAttributeTable. La finestra di progettazione esegue una query sulla proprietà AttributeTable di questa classe per individuare un insieme di attributi che specifica il comportamento in fase di progettazione. Per ulteriori informazioni, vedere Procedura dettagliata: aggiunta di metadati della fase di progettazione personalizzati e Distribuzione di un controllo personalizzato e di assembly della fase di progettazione.

Tabella di attributi

La classe AttributeTable associa attributi dei metadati della fase di progettazione con i tipi WPF e Silverlight. La tabella di attributi specifica una particolare implementazione della fase di progettazione per un tipo progettabile. Ad esempio, se si dispone di un AdornerPanel personalizzato per il controllo, si aggiunge un FeatureAttribute alla tabella di attributi per specificare un'implementazione FeatureProvider personalizzata.

Generatore di tabelle di attributi

Per creare una tabella di attributi, iniziare creando un'istanza della classe AttributeTableBuilder. Aggiungere metadati al generatore di tabelle di attributi chiamando il metodo AddCustomAttributes. Dopo aver aggiunto i metadati, produrre una tabella di attributi chiamando il metodo CreateTable. Poiché i metodi del generatore di tabelle di attributi supportano i delegati di callback, la creazione della tabella di attributi può essere posticipata finché non è necessaria.

Nel codice seguente viene mostrato come specificare un'implementazione dello strumento decorativo visuale personalizzata tramite una tabella di attributi.

' 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();
        }
    }
}

Per ulteriori informazioni, vedere Procedura dettagliata: creazione di uno strumento decorativo visuale in fase di progettazione.

Flusso di lavoro di base dell'implementazione della fase di progettazione

Di solito si segue un flusso di lavoro simile quando si creano esperienze di progettazione personalizzate. Per ulteriori informazioni, vedere Procedura: distribuire un controllo personalizzato e assembly della fase di progettazione.

Per esempi sulle modalità di implementazione di esperienze di progettazione personalizzate, vedere Esempi di Extensibility di WPF e Silverlight Designer.

Vantaggi di assembly della fase di progettazione separati

Il framework di WPF Designer per Visual Studio distingue i metadati della fase di progettazione dall'implementazione. La separazione dei metadati dal codice runtime del controllo è un importante principio della progettazione per le ragioni seguenti.

  • Le modifiche di compilazione e la logistica di integrazione tra team possono rendere scomoda la compilazione di metadati nel controllo.

  • La compilazione di metadati nel controllo impedisce agli strumenti esterni, ad esempio WPF Designer o Expression Blend, di modificare quei metadati in un secondo momento. Si tratta di un'importante questione di agilità. Se non vi è separazione tra metadati della fase di progettazione e il controllo, in Visual Studio non è possibile assegnare una versione alle finestre di progettazione senza richiedere una nuova versione di .NET Framework.

  • La compilazione dei metadati nel controllo aumenta in modo significativo la dimensione dell'assembly del controllo. Gli attributi della fase di progettazione rallentano inoltre il controllo. Le funzionalità del controllo, ad esempio l'associazione dati, che utilizza la reflection sono interessate in quanto gli attributi aggiuntivi vengono caricati in memoria.

  • I metadati della fase di progettazione forniscono la "personalità" della finestra di progettazione. Le funzionalità di una finestra di progettazione sono ampiamente legate all'applicazione che la ospita, non al controllo. WPF Designer e Expression Blend utilizzano set di metadati diversi per fornire un set di funzionalità indirizzato a un tipo specifico di utente.

Vedere anche

Riferimenti

AttributeTable

ProvideMetadataAttribute

Altre risorse

Procedura: distribuire un controllo personalizzato e assembly della fase di progettazione

Distribuzione di un controllo personalizzato e di assembly della fase di progettazione

Concetti di base sulla estensibilità

Informazioni sull'estensibilità Progettazione WPF