打开动态工具窗口

工具窗口通常从菜单上的命令或等效的键盘快捷方式打开。 但是,有时,你可能需要一个工具窗口,每当特定 UI 上下文应用时打开,并在 UI 上下文不再应用时关闭。 这些类型的工具窗口称为 动态自动可见

注意

有关预定义 UI 上下文的列表,请参阅 VSConstants.UICONTEXT

如果要在启动时打开动态工具窗口,并且创建可能会失败,则必须在方法中QueryShowTool实现IVsPackageDynamicToolOwnerEx接口并测试失败条件。 为了使 shell 知道你有一个应在启动时打开的动态工具窗口,必须将值(设置为 1)添加到 SupportsDynamicToolOwner 包注册。 此值不是标准的 PackageRegistrationAttribute一部分,因此必须创建自定义属性才能添加它。 有关自定义属性的详细信息,请参阅 使用自定义注册属性注册扩展

用于 FindToolWindow 打开工具窗口。 根据需要创建工具窗口。

注意

用户可以关闭动态工具窗口。 如果要创建菜单命令以便用户可以重新打开工具窗口,则应在打开工具窗口的同一 UI 上下文中启用菜单命令,否则将其禁用。

打开动态工具窗口

  1. 创建名为 DynamicToolWindow 的 VSIX 项目,并添加名为 DynamicWindowPane.cs 的工具窗口项模板。 有关详细信息,请参阅 使用工具窗口创建扩展。

  2. DynamicWindowPanePackage.cs 文件中,找到 DynamicWindowPanePackage 声明。 ProvideToolWindowAttribute添加和ProvideToolWindowVisibilityAttribute属性以注册工具窗口。

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

    上述属性将名为 DynamicWindowPane 的工具窗口注册为在 Visual Studio 关闭并重新打开时不会持久保存的工具窗口。 只要 SolutionExists_string 适用,DynamicWindowPane 就会打开,否则关闭。

  3. 生成项目并启动调试。 应显示实验实例。 不应看到工具窗口。

  4. 在实验实例中打开项目。 此时应显示工具窗口。