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 vários VSPackages são adicionados ao Visual Studio, a interface do usuário (interface do usuário) pode ficar superlotada com comandos. Você pode programar seu pacote para ajudar a reduzir esse problema, da seguinte maneira:
Programe o pacote para que ele seja carregado somente quando um usuário precisar.
Programe o pacote para que seus comandos sejam exibidos somente quando eles puderem ser necessários no contexto do estado atual do IDE (ambiente de desenvolvimento integrado).
Carregamento atrasado
A maneira típica de habilitar o carregamento atrasado é projetar o VSPackage para que seus comandos sejam exibidos na interface do usuário, mas o pacote em si não será carregado até que um usuário clique em um dos comandos. Para fazer isso, no arquivo .vsct, crie comandos sem sinalizadores de comando.
O exemplo a seguir mostra a definição de um comando de menu de um arquivo .vsct. Esse é o comando gerado pelo Modelo de Pacote do Visual Studio quando a opção Comando de Menu no modelo é selecionada.
<Button guid="guidTopLevelMenuCmdSet" id="cmdidTestCommand" priority="0x0100" type="Button">
<Parent guid="guidTopLevelMenuCmdSet" id="MyMenuGroup" />
<Icon guid="guidImages" id="bmpPic1" />
<Strings>
<CommandName>cmdidTestCommand</CommandName>
<ButtonText>Test Command</ButtonText>
</Strings>
</Button>
No exemplo, se o grupo pai for MyMenuGroupfilho de um menu de nível superior, como o menu Ferramentas , o comando ficará visível nesse menu, mas o pacote que executa o comando não será carregado até que o comando seja clicado por um usuário. No entanto, ao programar o comando para implementar a IOleCommandTarget interface, você pode habilitar o pacote a ser carregado quando o menu que contém o comando for expandido pela primeira vez.
Observe que o carregamento atrasado também pode melhorar o desempenho da inicialização.
Contexto atual e a visibilidade dos comandos
Você pode programar comandos VSPackage para serem visíveis ou ocultos, dependendo do estado atual dos dados do VSPackage ou das ações que são relevantes no momento. Você pode habilitar o VSPackage para definir o estado de seus comandos, normalmente usando uma implementação do QueryStatus método da IOleCommandTarget interface, mas isso requer que o VSPackage seja carregado antes que ele possa executar o código. Em vez disso, recomendamos que você habilite o IDE para gerenciar a visibilidade dos comandos sem carregar o pacote. Para fazer isso, no arquivo .vsct, associe comandos a um ou mais contextos especiais de interface do usuário. Esses contextos de interface do usuário são identificados por um GUID conhecido como GUID de contexto de comando.
O Visual Studio monitora alterações resultantes de ações do usuário, como carregar um projeto ou passar da edição para a criação. À medida que as alterações ocorrem, a aparência do IDE é modificada automaticamente. A tabela a seguir mostra quatro contextos principais de alteração de IDE que o Visual Studio monitora.
| Tipo de contexto | Description |
|---|---|
| Tipo de projeto ativo | Para a maioria dos tipos de projeto, esse GUID valor é o mesmo que o GUID do VSPackage que implementa o projeto. No entanto, os projetos do Visual C++ usam o Tipo GUID de Projeto como o valor. |
| Janela Ativa | Normalmente, essa é a última janela de documento ativa que estabelece o contexto atual da interface do usuário para associações de chave. No entanto, também pode ser uma janela de ferramentas que tem uma tabela de associação de chaves que se assemelha ao navegador da Web interno. Para janelas de documentos com várias guias, como o editor HTML, cada guia tem um contexto GUIDde comando diferente. |
| Serviço de Idioma Ativo | O serviço de idioma associado ao arquivo que atualmente é exibido em um editor de texto. |
| Janela de ferramenta ativa | Uma janela de ferramenta que está aberta e tem foco. |
Uma quinta área de contexto principal é o estado da interface do usuário do IDE. Os contextos de interface do usuário são identificados por contextos GUIDde comando ativos, da seguinte maneira:
Esses GUIDs são marcados como ativos ou inativos, dependendo do estado atual do IDE. Vários contextos de interface do usuário podem estar ativos ao mesmo tempo.
Ocultar e exibir comandos com base no contexto
Você pode exibir ou ocultar um comando de pacote no IDE sem carregar o pacote em si. Para fazer isso, defina o comando no arquivo .vsct do pacote, usando os sinalizadores de comando DefaultDisabled, DefaultInvisible e DynamicVisibility, e adicionando um ou mais elementos VisibilityItem à seção VisibilityConstraints. Quando um contexto GUID de comando especificado se torna ativo, o comando é exibido sem carregar o pacote.
GUIDs de contexto personalizado
Se um GUID de contexto de comando apropriado ainda não estiver definido, você poderá definir um em seu VSPackage e programá-lo para que ele seja ativo ou inativo, conforme necessário, para controlar a visibilidade de seus comandos. Use o SVsShellMonitorSelection serviço para:
Registrar GUIDs de contexto (chamando o método GetCmdUIContextCookie).
Obtenha o estado de um contexto
GUID(chamando o IsCmdUIContextActive método).Ative e desative os contextos
GUID(chamando o método SetCmdUIContext).Cuidado
Certifique-se de que seu VSPackage não afete o estado de qualquer GUID de contexto existente, pois outros VSPackages podem depender deles.
Example
O exemplo a seguir de um comando VSPackage demonstra a visibilidade dinâmica de um comando gerenciado por contextos de comando sem carregar o VSPackage.
O comando é definido para ser habilitado e exibido sempre que uma solução existir; ou seja, sempre que um dos seguintes GUIDs de contexto de comando estiver ativo:
No exemplo, observe que cada sinalizador de comando é um elemento de Sinalizador de Comando separado.
<Button guid="guidDynamicVisibilityCmdSet" id="cmdidMyCommand"
priority="0x0100" type="Button">
<Parent guid="guidDynamicVisibilityCmdSet" id="MyMenuGroup" />
<Icon guid="guidImages" id="bmpPic1" />
<CommandFlag>DefaultDisabled</CommandFlag>
<CommandFlag>DefaultInvisible</CommandFlag>
<CommandFlag>DynamicVisibility</CommandFlag>
<Strings>
<CommandName>cmdidMyCommand</CommandName>
<ButtonText>My Command name</ButtonText>
</Strings>
</Button>
Observe também que cada contexto de interface do usuário deve ser fornecido em um elemento separado VisibilityItem , da seguinte maneira.
<VisibilityConstraints>
<VisibilityItem guid="guidDynamicVisibilityCmdSet"
id="cmdidMyCommand" context="UICONTEXT_EmptySolution" />
<VisibilityItem guid="guidDynamicVisibilityCmdSet"
id="cmdidMyCommand" context="UICONTEXT_SolutionHasSingleProject" />
<VisibilityItem guid="guidDynamicVisibilityCmdSet"
id="cmdidMyCommand" context="UICONTEXT_SolutionHasMultipleProjects" />
</VisibilityConstraints>