Condividi tramite


Procedura: Aprire una finestra degli strumenti dinamica

Le finestre degli strumenti in genere vengono aperte da un comando a un menu, o da una scelta rapida equivalente. Talvolta, tuttavia, potrebbe essere necessaria una finestra degli strumenti che viene visualizzata ogni volta che un contesto specifico (UI) dell'interfaccia utente è applicabile e viene chiusa quando il contesto dell'interfaccia utente non è più valido. Le finestre degli strumenti come questi vengono chiamate dinamiche o auto-visibili.

Nota

Per un elenco dei contesti predefiniti dell'interfaccia utente, vedere VSConstants e cercare i campi che iniziano con UICONTEXT_.

Se si desidera aprire una finestra degli strumenti dinamica all'avvio ed è possibile che la creazione non riesce, è necessario implementare l'interfaccia di IVsPackageDynamicToolOwnerEx e verificare le condizioni di errore nel metodo di QueryShowTool . In modo dalla shell per sapere se si dispone di una finestra degli strumenti dinamica che deve essere aperta all'avvio, è necessario aggiungere il valore di SupportsDynamicToolOwner (impostato su 1) alla registrazione del pacchetto. Questo valore non fa parte di PackageRegistrationAttributestandard, pertanto è necessario creare un attributo personalizzato per aggiungerlo. Per ulteriori informazioni sugli attributi personalizzati, vedere L'utilizzo di un attributo personalizzato di registrazione per registrare un'estensione.

Utilizzo FindToolWindow aprire una finestra degli strumenti. La finestra degli strumenti viene creata in base alle necessità.

Nota

Una finestra degli strumenti dinamica può essere chiusa dall'utente.Se si desidera creare un comando di menu in modo che l'utente possa riaprire la finestra degli strumenti, il comando di menu deve essere abilitato lo stesso contesto dell'interfaccia utente che consente di aprire la finestra degli strumenti ed essere disabilitato in caso contrario.

Per aprire una finestra degli strumenti dinamica

  1. Creare il riquadro della finestra degli strumenti, il frame e il package VS che li implementa. Per ulteriori informazioni, vedere Procedura: Per creare una finestra degli strumenti.

  2. Registrare la finestra degli strumenti con Visual Studio aggiungendo ProvideToolWindowAttribute e ProvideToolWindowVisibilityAttribute al package VS che fornisce.

    <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 
    

    In questo modo viene registrato la finestra degli strumenti denominata DynamicWindowPane come finestra temporanea che non venga mantenuta quando Visual Studio viene chiuso e riaperto. DynamicWindowPane viene aperto ogni volta che UICONTEXT_SolutionExists viene applicato e chiuso in caso contrario. una posizione predefinita e una dimensione è specificata. Per ulteriori informazioni, vedere Procedura: Registrare una finestra degli strumenti.

  3. Utilizzo FindToolWindow trovare il riquadro della finestra degli strumenti o crearlo se non esiste già.

    ' 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. Ottenere il frame di finestra degli strumenti dal riquadro della finestra degli strumenti.

    Dim windowFrame As IVsWindowFrame = TryCast(window.Frame, IVsWindowFrame)
    
    IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame;
    
  5. Per visualizzare la finestra degli strumenti.

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

Vedere anche

Concetti

Concetti di base di un VSPackage