Configuração de metadados e inicialização de Designer
Manipulação dos atributos de metadados e o filtro associado a um designer ou componente designer fornece um mecanismo para aplicativos definir quais ferramentas são usadas por um determinado designer para lidar com diferentes Type objetos (como estruturas de dados, classes ou entidades gráficas), quando o designer está disponível e como o IDE de Visual Studio está configurado para suportar o designer (por exemplo, que caixa de ferramentas categoria ou o guia está disponível).
O SDK do Visual Studio fornece diversos mecanismos para facilitar o controle do designer ou designer do componente de inicialização e a manipulação de seus metadados por um VSPackage.
Inicializando os metadados e informações de configuração
Porque eles são carregados sob demanda, VSPackages talvez não foram carregados pelo Visual Studio ambiente antes de criar uma instância de um designer. Portanto, a VSPackages não é possível usar o mecanismo padrão para a configuração de um designer ou componente designer na criação, o que é lidar com um DesignerCreated evento. Em vez disso, um VSPackage implementa uma instância de DesignSurfaceExtension interface e se registra para fornecer personalizações, conhecidas como extensões de superfície de design.
Personalizando a inicialização
Personalizar um designer, um componente ou uma superfície de design, envolve:
Modificar os metadados de designer e alterando efetivamente como uma determinada Type é acessado ou convertido.
Normalmente, isso é feito através do UITypeEditor ou TypeConverter mecanismos.
Por exemplo, quando System.Windows.Forms-baseado em designers são inicializados, o Visual Studio ambiente modifica o UITypeEditor para Image objetos usados com o designer para usar o Gerenciador de recursos para obter bitmaps em vez do sistema de arquivos.
Integração com o ambiente, por exemplo, inscrições em eventos ou obter informações de configuração do projeto. Você pode obter as informações de configuração do projeto e assinar eventos obtendo o ITypeResolutionService interface.
Modificação do ambiente do usuário pela ativação apropriado caixa de ferramentas categorias ou restringindo a aplicabilidade do designer, aplicando uma instância da ToolboxItemFilterAttribute classe para o designer.
Designer inicialização por um VSPackage
Um VSPackage deve tratar a inicialização pelo designer:
Criando um objeto implementando a DesignSurfaceExtension classe.
Dica
O DesignSurfaceExtension classe nunca deve ser implementada no mesmo objeto, como o Package classe.
Registrar a implementação da classe DesignSurfaceExtension como fornecendo suporte para extensões de designer do VSPackage aplicando instâncias de DesignSurfaceExtensionAttribute, ProvideObjectAttribute e ProvideServiceAttribute à classe fornecendo a implementação do VSPackage de Package.
Sempre que qualquer designer ou componente designer é criado, o Visual Studio ambiente:
Acessa cada provedor de extensão de superfície de design registrados.
Cria e inicializa uma instância de cada provedor de extensão de superfície de design DesignSurfaceExtension objeto
Chama cada provedor de extensão de superfície de design OnDesignerCreated método ou OnComponentCreated método (conforme apropriado).
Ao implementar a DesignSurfaceExtension de objeto como um membro de um VSPackage, é importante entender que:
O Visual Studio ambiente não fornece qualquer controle sobre quais metadados ou outras definições de configuração um determinado DesignSurfaceExtension provedor modifica. É possível que dois ou mais DesignSurfaceExtension provedores, modificando o mesmo recurso de designer de maneiras conflitantes, com a modificação final sendo definitiva. É indeterminado qual modificação é aplicada pela última vez.
É possível restringir explicitamente uma implementação da DesignSurfaceExtension objeto para designers específicos, aplicando as instâncias de ToolboxItemFilterAttribute para essa implementação. Para obter mais informações sobre caixa de ferramentas item de filtragem, consulte o ToolboxItemFilterAttribute e ToolboxItemFilterType.
Provisionamento de metadados adicionais
Um VSPackage pode alterar a configuração de um designer ou componente designer diferente no tempo de design.
O ProvideDesignerMetadataAttribute classe pode ser usada de forma programática, ou ser aplicada a um VSPackage fornecendo um designer.
Uma instância de ProvideDesignerMetadataAttribute classe é usada para modificar os metadados de componentes criados em uma superfície de design. Por exemplo, uma poderia substituir um Pesquisador de propriedades padrão usada pelo CommonDialog objetos, com um navegador de propriedade personalizada.
Modificações fornecidas por uma instância de ProvideDesignerMetadataAttribute aplicados à implementação do VSPackage Package pode ter um dos dois escopos:
Global – para todas as novas instâncias de um determinado componente
Local – referentes apenas a ocorrência do componente criado em uma superfície de design fornecida pelo VSPackage atual.
O IsGlobal propriedade da ProvideDesignerMetadataAttribute instância aplicada a implementação do VSPackage do Package determina a este escopo.
Aplicar o atributo para uma implementação de Package com o IsGlobal propriedade da ProvideDesignerMetadataAttribute objeto definido como true, como abaixo, altera o navegador para todo o Visual Studio ambiente:
[ProvideDesignerMetadata(typeof(Color), typeof(CustomBrowser), IsGlobal=true)]
internal class MyPackage : Package {}
Se o sinalizador global foi definido como false, e em seguida, a alteração de metadados é local para o designer atual suportado pelo VSPackage atual:
[ProvideDesignerMetadata(typeof(Color), typeof(CustomBrowser), IsGlobal=false)]
internal class MyPackage : Package {}
Dica
No momento, a superfície de design oferece suporte apenas a criação de componentes e, portanto, somente os componentes podem ter metadados local.No exemplo acima, podemos tentou modificar uma propriedade, como o Color propriedade de um objeto.Se false foi passado para o sinalizador global, CustomBrowser nunca apareceria porque nunca na verdade, o designer cria uma instância de Color.Definindo o sinalizador global para false é útil para componentes, como, por exemplo, controles, temporizadores e caixas de diálogo.
Consulte também
Referência
DesignSurfaceExtensionAttribute