Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Quando você usa extensibilidade para personalizar o Windows Presentation Foundation (WPF) Designer for Visual Studio, você geralmente irá criar controles personalizados.O código para os controles e os metadados definindo a design-time behavior de seus controles é acrescentado em conjuntos separados.Os metadados é acrescentado no MetadataStore.Para obter mais informações, consulte Arquitetura de extensibilidade Designer WPF.
Este tópico contém informações sobre design-time behavior, como adorners personalizados, contexto personalizado menus e editores de propriedade personalizada.O armazenamento de metadados é implementado como tabelas atributo baseada em código.
Observação: |
|---|
Metadados assemblies são carregados na seguinte ordem: *. Design.dll primeiro, *. VisualStudio.Design.dll ou *. expressão.Design.dll segundo.Isso permite metadados Designer-específicos substituir os metadados compartilhado comum. |
Adicionar tabelas atributos personalizados ao armazenamento de metadados
Quando um designer carrega um controle personalizado, ele procura um tipo no assembly em tempo de design correspondente que implementa IRegisterMetadata.Se encontrado, ele instancia o tipo e chama o método Register automaticamente.
Adicionar tabelas atributos personalizados ao armazenamento de metadados
No conjunto geral de tempo de design para o controle ( < O controle > .Design.dll), adicionar um arquivo chamado METADATA.cs ou METADATA.vb.
No arquivo de metadados, adicionar uma classe que implementa IRegisterMetadata, e implementar o método Register.
Criar instância de um objeto AttributeTableBuilder e chamar o método AddCustomAttributes para adicionar os atributos a ele.
Chame o método AddAttributeTable para adicionar o AttributeTable armazenamento de metadados.
Repita as etapas de 1 a 4 para o assembly Visual Studio-específicos em tempo de design ( < O controle > .VisualStudio.Design.dll).
Exemplo
O exemplo a seguir adiciona metadados para um controle personalizado.O código conecta um editor de propriedades personalizadas a uma propriedade da controle personalizado.
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
O exemplo a seguir adiciona metadados para um controle personalizado.O código conecta adorners personalizados e um menu de contexto personalizado para o controle personalizado.
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
Consulte também
Conceitos
Referência
Outros recursos
Conceitos básicos de extensibilidade
Observação: