Compartilhar via


Abrir uma janela de ferramenta dinâmica

Normalmente, as janelas de ferramentas são abertas a partir de um comando em um menu ou de um atalho de teclado equivalente. Às vezes, no entanto, você pode precisar de uma janela de ferramenta que é aberta sempre que um contexto de interface do usuário específico se aplica e fecha quando o contexto de interface do usuário não se aplica mais. Esses tipos de janelas de ferramentas são chamados de dinâmicos ou autovisíveis.

Observação

Para obter uma lista de contextos de interface do usuário predefinidos, consulte VSConstants.UICONTEXT.

Se você deseja abrir uma janela de ferramenta dinâmica na inicialização e é possível que a criação falhe, você deve implementar a IVsPackageDynamicToolOwnerEx interface e testar as condições de falha no QueryShowTool método. Para que o shell saiba que você tem uma janela de ferramenta dinâmica que deve ser aberta na inicialização, você deve adicionar o valor (definido como 1) ao registro do SupportsDynamicToolOwner pacote. Esse valor não faz parte do padrão PackageRegistrationAttribute, portanto, você deve criar um atributo personalizado para adicioná-lo. Para obter mais informações sobre atributos personalizados, consulte Usar um atributo de registro personalizado para registrar uma extensão.

Use FindToolWindow para abrir uma janela de ferramenta. A janela de ferramenta é criada conforme necessário.

Observação

Uma janela de ferramenta dinâmica pode ser fechada pelo usuário. Se você quiser criar um comando de menu para que o usuário possa reabrir a janela da ferramenta, o comando de menu deverá ser habilitado no mesmo contexto da interface do usuário que abre a janela da ferramenta e desabilitado caso contrário.

Para abrir uma janela de ferramenta dinâmica

  1. Crie um projeto VSIX chamado DynamicToolWindow e adicione um modelo de item de janela de ferramenta chamado DynamicWindowPane.cs. Para obter mais informações, consulte Criar uma extensão com uma janela de ferramenta.

  2. No arquivo DynamicWindowPanePackage.cs localize a declaração DynamicWindowPanePackage. Adicione os ProvideToolWindowAttribute atributos e ProvideToolWindowVisibilityAttribute para registrar a janela da ferramenta.

    [ProvideToolWindow(typeof(DynamicWindowPane)]
    [ProvideToolWindowVisibility(typeof(DynamicWindowPane), VSConstants.UICONTEXT.SolutionExists_string)]
    [PackageRegistration(UseManagedResourcesOnly = true)]
    [InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)] // Info on this package for Help/About
    [ProvideMenuResource("Menus.ctmenu", 1)]
    [ProvideToolWindow(typeof(DynamicToolWindow.DynamicWindowPane))]
    [Guid(DynamicWindowPanePackage.PackageGuidString)]
    public sealed class DynamicWindowPanePackage : Package
    {. . .}
    

    Os atributos acima registram a janela de ferramenta chamada DynamicWindowPane como uma janela transitória que não é persistente quando o Visual Studio é fechado e reaberto. DynamicWindowPane é aberto sempre que SolutionExists_string se aplica e fechado de outra forma.

  3. Compile o projeto e comece a depuração. A instância experimental deve aparecer. Você não deve ver a janela da ferramenta.

  4. Abra um projeto na instância experimental. A janela de ferramentas deve aparecer.