Partager via


Mise à disposition de métadonnées au moment du design

Lorsque vous créez des expériences de conception personnalisées pour votre contrôle WPF ou Silverlight, vous les déployez dans des assemblys au moment du design séparés. Vous spécifiez comment ces implémentations au moment du design personnalisées interagissent avec les outils, tels que Visual Studio et Expression Blend, en créant une table remplie avec les attributs de métadonnées.

Assemblys au moment du design

Lorsqu'un outil de conception, tel que Visual Studio, ouvre l'assembly de votre contrôle personnalisé, il recherche également les assemblys au moment du design associés. Il recherche en particulier l'attribut de niveau assembly ProvideMetadataAttribute. Lorsque cet attribut est trouvé, le concepteur recherche une classe qui implémente l'interface IProvideAttributeTable dans l'assembly. Le concepteur interroge la propriété AttributeTable de cette classe pour trouver une collection d'attributs qui spécifie le comportement au moment du design. Pour plus d'informations, consultez Procédure pas à pas : mise à disposition de métadonnées au moment du design personnalisées et Déploiement d'un contrôle personnalisé et d'assemblys au moment du design.

Table d'attributs

La classe AttributeTable associe des attributs de métadonnées au moment du design aux types WPF et Silverlight. La table d'attributs spécifie une implémentation au moment du design particulière pour un type concevable. Par exemple, si vous avez un AdornerPanel personnalisé pour votre contrôle, vous ajoutez un FeatureAttribute à la table d'attributs pour spécifier une implémentation FeatureProvider personnalisée.

Générateur de tables d'attributs

Pour créer une table d'attributs, vous commencez par créer une instance de la classe AttributeTableBuilder. Vous ajoutez des métadonnées au générateur de tables d'attributs en appelant la méthode AddCustomAttributes. Lorsque vous avez terminé d'ajouter des métadonnées, vous produisez une table d'attributs en appelant la méthode CreateTable. Les méthodes du générateur de table d'attributs prenant en charge les délégués de rappel, la création de la table d'attributs peut être différée autant que cela est nécessaire.

Le code suivant montre comment spécifier une implémentation d'ornement personnalisée à l'aide d'une table d'attributs.

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

Pour plus d'informations, consultez Procédure pas à pas : création d'un ornement au moment du design.

Workflow d'une implémentation au moment du design de base

Vous suivez généralement un workflow similaire lorsque vous créez des expériences de conception personnalisées. Pour plus d'informations, consultez Comment : déployer un contrôle personnalisé et des assemblys au moment du design.

Pour obtenir des exemples qui indiquent comment implémenter des expériences au moment du design personnalisées, consultez Exemples d'extensibilité du Concepteur WPF et Silverlight (page éventuellement en anglais).

Avantages des assemblys au moment du design séparés

L'infrastructure du Concepteur WPF pour Visual Studio découple de l'implémentation les métadonnées au moment du design. La séparation des métadonnées du code au moment de l'exécution du contrôle est un principe de conception de base important pour les raisons suivantes.

  • La mise en place d'une logistique de traitement et d'intégration entre équipes peut rendre fastidieuse la compilation de métadonnées dans le contrôle.

  • La compilation de métadonnées dans le contrôle empêche les outils externes, tels que le Concepteur WPF ou Expression Blend, de modifier ces métadonnées ultérieurement. Il s'agit d'un élément essentiel pour assurer la souplesse. Sans la séparation des métadonnées au moment du design du contrôle, Visual Studio ne peut pas gérer la version de ses concepteurs sans requérir une nouvelle version du .NET Framework.

  • La compilation des métadonnées dans le contrôle augmente considérablement la taille de l'assembly du contrôle. Les attributs au moment du design ralentissent également le contrôle. Les fonctionnalités du contrôle, telles que la liaison de données, qui utilise la réflexion, sont affectées en tant qu'attributs supplémentaires chargés dans la mémoire.

  • Les métadonnées au moment du design fournissent la « personnalité » du concepteur. Les fonctionnalités d'un concepteur sont en grande partie liées à l'application qui l'héberge, pas au contrôle. Le Concepteur WPF et Expression Blend utilisent des jeux de métadonnées différents pour fournir un jeu de fonctionnalités ciblant un type d'utilisateur spécifique.

Voir aussi

Référence

AttributeTable

ProvideMetadataAttribute

Autres ressources

Comment : déployer un contrôle personnalisé et des assemblys au moment du design

Déploiement d'un contrôle personnalisé et d'assemblys au moment du design

Concepts d'extensibilité de base

Fonctionnement de l'extensibilité du Concepteur WPF