Compartir a través de


Cómo: Abra una ventana de herramientas dinámica

Las ventanas de herramientas se abra normalmente desde un comando de un menú, o un método abreviado de teclado equivalente. En ocasiones, sin embargo, podría necesitar una ventana de herramientas que abra siempre que aplique un contexto (UI) concreto de la interfaz de usuario, y se cierra cuando se aplica el contexto de la interfaz de usuario no más. Las ventanas de herramientas como éstas se denominan dinámicas o auto-visible.

NotaNota

Para obtener una lista de contextos predefinidos de la interfaz de usuario, vea VSConstants y busque los campos que comienzan con UICONTEXT_.

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

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

NotaNota

Una ventana de herramientas dinámica se puede cerrarse por el usuario.Si desea crear un comando de menú para que el usuario puede volver a abrir la ventana de herramientas, el comando de menú debe habilitarse en el mismo contexto de la interfaz de usuario que abre la ventana de herramientas, o deshabilitado de otra manera.

para abrir una ventana de herramientas dinámica

  1. Crear el panel de la ventana de herramientas, el cuadro, y el Paquete que se implementan. Para obtener más información, vea Cómo: cree una ventana de herramientas.

  2. Registre la ventana de herramientas con Visual Studio agregando ProvideToolWindowAttribute y ProvideToolWindowVisibilityAttribute el Paquete que lo proporciona.

    <ProvideToolWindow(GetType(DynamicWindowPane), PositionX:=250, PositionY:=250, Width:=160, Height:=180, Transient:=True), _
     ProvideToolWindowVisibility(GetType(DynamicWindowPane), "f1536ef8-92ec-443c-9ed7-fdadf150da82"), _
     ProvideMenuResource(1000, 1), _
     DefaultRegistryRoot("Software\Microsoft\VisualStudio\8.0Exp"), _
     PackageRegistration(UseManagedResourcesOnly:=True), _
     Guid("01069CDD-95CE-4620-AC21-DDFF6C57F012")> _
    Public Class PackageToolWindow
        Inherits Package
    
    [ProvideToolWindow(typeof(DynamicWindowPane), PositionX = 250, PositionY = 250, Width = 160, Height = 180, Transient = true)]
    [ProvideToolWindowVisibility(typeof(DynamicWindowPane), /*UICONTEXT_SolutionExists*/"f1536ef8-92ec-443c-9ed7-fdadf150da82")]
    [ProvideMenuResource(1000, 1)]
    [DefaultRegistryRoot(@"Software\Microsoft\VisualStudio\8.0Exp")]
    [PackageRegistration(UseManagedResourcesOnly = true)]
    [Guid("01069CDD-95CE-4620-AC21-DDFF6C57F012")]
    public class PackageToolWindow : Package 
    

    Esto registra la ventana de herramientas denominada DynamicWindowPane como ventana transitorio que no se conserva cuando Visual Studio se cierra y vuelve a abrir. DynamicWindowPane se abre siempre que se aplique UICONTEXT_SolutionExists, y cerrar de otra manera. Se especifica una ubicación predeterminada y un tamaño. Para obtener más información, vea Cómo: registre una ventana de herramientas.

  3. Uso FindToolWindow de encontrar el panel de la ventana de herramientas o de hacerlo si no existe.

    ' Get the (only) instance. 
    ' The last flag is set to true so that if the tool window does not exists it will be created. 
    Dim window As ToolWindowPane = Me.FindToolWindow(GetType(DynamicWindowPane), 0, True)
    If (window Is Nothing) Or (window.Frame Is Nothing) Then 
        Throw New NotSupportedException(Resources.CanNotCreateWindow)
    End If
    
    // Get the (only) instance of this tool window. 
    // The last flag is set to true so that if the tool window does not exists it will be created.
    ToolWindowPane window = this.FindToolWindow(typeof(DynamicWindowPane), 0, true);
    if ((null == window) || (null == window.Frame))
    {
        throw new NotSupportedException(Resources.CanNotCreateWindow);
    }
    
  4. Obtenga el cuadro de la ventana de herramientas del panel de la ventana de herramientas.

    Dim windowFrame As IVsWindowFrame = TryCast(window.Frame, IVsWindowFrame)
    
    IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame;
    
  5. Mostrar la ventana de herramientas.

    Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(windowFrame.Show())
    
    ErrorHandler.ThrowOnFailure(windowFrame.Show());
    

Vea también

Conceptos

VSPackage Essentials