Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Mise à jour : novembre 2007
Lorsque vous utilisez l'extensibilité pour personnaliser le Concepteur Windows Presentation Foundation (WPF) pour Visual Studio, vous créez souvent des contrôles personnalisés. Le code des contrôles et les métadonnées définissant le comportement au moment du design de vos contrôles sont pris en charge dans des assemblys distincts. En effet, les métadonnées sont prises en charge dans MetadataStore. Pour plus d'informations, consultez Architecture de l'extensibilité du concepteur WPF.
Le magasin de métadonnées contient des informations à propos du comportement au moment du design, comme les ornements personnalisés, les menus contextuels personnalisés et les éditeurs de propriétés personnalisés. Le magasin de métadonnées est implémenté dans des tables d'attributs basées sur du code.
Remarque : |
|---|
Les assemblys de métadonnées sont chargés dans l'ordre suivant : *.Design.dll, puis *.VisualStudio.Design.dll ou *.Expression.Design.dll. Les métadonnées spécifiques du concepteur peuvent ainsi substituer les métadonnées communes partagées. |
Ajout de tables d'attributs personnalisées au magasin de métadonnées
Lorsqu'un concepteur charge un contrôle personnalisé, il recherche un type dans l'assembly au moment du design correspondant qui implémente IRegisterMetadata. S'il le trouve, il instancie le type et appelle automatiquement sa méthode Register.
Pour ajouter des tables d'attributs personnalisées au magasin de métadonnées
Dans l'assembly au moment du design général correspondant à votre contrôle (<Votre contrôle>.Design.dll), ajoutez un fichier nommé Metadata.cs ou Metadata.vb.
Dans le fichier de métadonnées, ajoutez une classe qui implémente IRegisterMetadata et implémentez la méthode Register.
Instanciez un objet AttributeTableBuilder et appelez la méthode AddCustomAttributes pour lui ajouter les attributs.
Appelez la méthode AddAttributeTable pour ajouter AttributeTable au magasin de métadonnées.
Répétez les étapes 1 à 4 pour l'assembly au moment du design spécifique de Visual Studio (<Votre contrôle>.VisualStudio.Design.dll).
Exemple
L'exemple suivant ajoute des métadonnées pour un contrôle personnalisé. Le code connecte un éditeur de propriétés personnalisé à une propriété du contrôle personnalisé.
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
L'exemple suivant ajoute des métadonnées pour un contrôle personnalisé. Le code connecte des ornements personnalisés et un menu contextuel personnalisé au contrôle personnalisé.
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
Voir aussi
Concepts
Référence
Autres ressources
Concepts d'extensibilité de base
Remarque :