Procedura: utilizzare l'archivio di metadati
Aggiornamento: novembre 2007
Quando si utilizza l'estensibilità per personalizzare Progettazione Windows Presentation Foundation (WPF) per Visual Studio, spesso si creano controlli personalizzati. Il codice per i controlli e i metadati che definiscono il comportamento in fase di progettazione dei controlli sono inseriti in assembly separati. I metadati sono inseriti in MetadataStore. Per ulteriori informazioni, vedere Architettura di estensibilità di Progettazione WPF.
L'archivio di metadati contiene informazioni sul comportamento in fase di progettazione, ad esempio in relazione a strumenti decorativi personalizzati, menu di scelta rapida personalizzati ed editor di proprietà personalizzati. L'archivio di metadati viene implementato sotto forma di tabelle di attributi basate sul codice.
Nota: |
---|
Gli assembly di metadati sono caricati nell'ordine seguente: prima *.Design.dll, poi *.VisualStudio.Design.dll o *.Expression.Design.dll. In questo modo i metadati specifici della finestra di progettazione possono eseguire l'override dei comuni metadati condivisi. |
Aggiunta di tabelle di attributi personalizzate all'archivio di metadati
Quando in una finestra di progettazione viene caricato un controllo personalizzato, viene cercato un tipo nel corrispondente assembly Design-Time che implementa IRegisterMetadata. Se trovato, viene creata un'istanza del tipo e ne viene chiamato automaticamente il metodo Register.
Per aggiungere tabelle di attributi personalizzate all'archivio di metadati
Nell'assembly Design-Time generale per il controllo (< Controllo >.Design .dll), aggiungere un file denominato Metadata.cs o Metadata.vb.
Nel file di metadati aggiungere una classe che implementa IRegisterMetadata e implementare il metodo Register.
Creare un'istanza di un oggetto AttributeTableBuilder e chiamare il metodo AddCustomAttributes per aggiungergli gli attributi.
Chiamare il metodo AddAttributeTable per aggiungere AttributeTable all'archivio di metadati.
Ripetere i passaggi da 1 a 4 per l'assembly Design-Time specifico di Visual Studio (<Controllo>.VisualStudio.Design.dll).
Esempio
Nell'esempio seguente vengono aggiunti dei metadati per un controllo personalizzato. Il codice connette un editor di proprietà personalizzato a una proprietà del controllo personalizzato.
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
Nell'esempio seguente vengono aggiunti dei metadati per un controllo personalizzato. Il codice connette strumenti decorativi visuali personalizzati e un menu di scelta rapida personalizzato al controllo personalizzato.
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
Vedere anche
Concetti
Riferimenti
Altre risorse
Concetti di base sulla estensibilità