Share via


Abrir una ventana de herramientas dinámica

Normalmente, las ventanas de herramientas se abren desde un comando en un menú o un método abreviado de teclado equivalente. Sin embargo, en ocasiones, es posible que necesite una ventana de herramientas que se abra cada vez que se aplique un contexto de interfaz de usuario específico y se cierre cuando el contexto de la interfaz de usuario ya no se aplique. Estos tipos de ventanas de herramientas se denominan dinámicas o visibles automáticamente.

Nota:

Para obtener una lista de contextos de interfaz de usuario predefinidos, consulte VSConstants.UICONTEXT.

Si desea abrir una ventana de herramientas dinámica en el inicio y es posible que se produzca un error en la creación, debe implementar la IVsPackageDynamicToolOwnerEx interfaz y probar las condiciones de error en el QueryShowTool método . Para que el shell sepa que tiene una ventana de herramientas dinámica que se debe abrir al iniciarse, debe agregar el SupportsDynamicToolOwner valor (establecido en 1) al registro del paquete. Este valor no forma parte del estándar PackageRegistrationAttribute, por lo que debe crear un atributo personalizado para agregarlo. Para obtener más información sobre los atributos personalizados, consulte Uso de un atributo de registro personalizado para registrar una extensión.

Use FindToolWindow para abrir una ventana de herramientas. La ventana de herramientas se crea según sea necesario.

Nota:

El usuario puede cerrar una ventana de herramientas dinámica. Si desea crear un comando de menú para que el usuario pueda volver a abrir la ventana de herramientas, el comando de menú debe estar habilitado en el mismo contexto de interfaz de usuario que abre la ventana de herramientas y deshabilitado de lo contrario.

Para abrir una ventana de herramientas dinámica

  1. Cree un proyecto VSIX denominado DynamicToolWindow y agregue una plantilla de elemento de ventana de herramientas denominada DynamicWindowPane.cs. Para obtener más información, consulte Creación de una extensión con una ventana de herramientas.

  2. En el archivo DynamicWindowPanePackage.cs , busque la declaración DynamicWindowPanePackage. Agregue los ProvideToolWindowAttribute atributos y ProvideToolWindowVisibilityAttribute para registrar la ventana de herramientas.

    [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
    {. . .}
    

    Los atributos anteriores registran la ventana de herramientas denominada DynamicWindowPane como una ventana transitoria que no se conserva cuando Visual Studio se cierra y vuelve a abrir. DynamicWindowPane se abre siempre que SolutionExists_string se aplica y se cierra de lo contrario.

  3. Compile la solución y comience la depuración. Debería aparecer la instancia experimental. No debería ver la ventana de herramientas.

  4. Abra un proyecto en la instancia experimental. Debería aparecer la ventana de herramientas.