Partager via


Comment : ouvrez une fenêtre Outil dynamique

Les fenêtres Outil sont généralement ouvertes d'une commande dans un menu, ou un raccourci clavier équivalent. Parfois, toutefois, vous pouvez avoir besoin d'une fenêtre Outil qui ouvre chaque fois qu'un contexte particulier (UI) d'interface utilisateur s'applique, et se ferme quand le contexte d'interface utilisateur ne s'applique plus. Les fenêtres Outil comme celles-ci sont appelées dynamiques ou automobile-visibles.

Notes

Pour obtenir la liste des contextes prédéfinis d'interface utilisateur, consultez l' VSConstants et recherchez les champs qui commencent par UICONTEXT_.

Si vous souhaitez ouvrir une fenêtre Outil dynamique au démarrage, il est également possible que la création échoue, vous devez implémenter l'interface d' IVsPackageDynamicToolOwnerEx et tester les conditions d'échec dans la méthode d' QueryShowTool . Pour que le shell sache que vous avez une fenêtre Outil dynamique qui doit être ouverte au démarrage, vous devez ajouter la valeur d' SupportsDynamicToolOwner (la valeur 1) à votre alignement de package. Cette valeur ne fait pas partie d' PackageRegistrationAttributestandard, vous devez créer un attribut personnalisé pour l'ajouter. Pour plus d'informations sur les attributs personnalisés, consultez À l'aide d'un attribut personnalisé d'alignement pour enregistrer une extension.

utilisation FindToolWindow d'ouvrir une fenêtre Outil. La fenêtre Outil est créée si nécessaire.

Notes

une fenêtre Outil dynamique peut être fermée par l'utilisateur.Si vous souhaitez créer une commande de menu afin que l'utilisateur peut rouvrir la fenêtre Outil, la commande de menu doit être activée dans le même contexte d'interface utilisateur qui ouvre la fenêtre Outil, et être désactivée sinon.

pour ouvrir une fenêtre Outil dynamique

  1. Créez le volet de la fenêtre Outil, le frame, et le VSPackage qui l'implémente. Pour plus d'informations, consultez Comment : créez une fenêtre Outil.

  2. Enregistrez la fenêtre Outil avec Visual Studio en ajoutant ProvideToolWindowAttribute et ProvideToolWindowVisibilityAttribute au VSPackage fournis par.

    <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 
    

    Cela enregistre la fenêtre Outil nommée DynamicWindowPane comme fenêtre transitoire qui n'est pas rendu persistant lorsque Visual Studio est fermé et rouvert. DynamicWindowPane est ouvert chaque fois qu'UICONTEXT_SolutionExists s'applique, et sinon fermé. un emplacement par défaut et une taille est spécifié. Pour plus d'informations, consultez Comment : enregistrez une fenêtre Outil.

  3. Utilisation FindToolWindow de rechercher le volet de la fenêtre Outil ou de créer s'il n'existe pas.

    ' 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. Obtenez le frame de fenêtre Outil du volet de la fenêtre Outil.

    Dim windowFrame As IVsWindowFrame = TryCast(window.Frame, IVsWindowFrame)
    
    IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame;
    
  5. Afficher la fenêtre Outil.

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

Voir aussi

Concepts

VSPackage Essentials