打开动态工具窗口
工具窗口通常从菜单上的命令或等效的键盘快捷方式打开。 但是,有时,你可能需要一个工具窗口,每当特定 UI 上下文应用时打开,并在 UI 上下文不再应用时关闭。 这些类型的工具窗口称为 动态 或 自动可见。
注意
有关预定义 UI 上下文的列表,请参阅 VSConstants.UICONTEXT。
如果要在启动时打开动态工具窗口,并且创建可能会失败,则必须在方法中QueryShowTool实现IVsPackageDynamicToolOwnerEx接口并测试失败条件。 为了使 shell 知道你有一个应在启动时打开的动态工具窗口,必须将值(设置为 1)添加到 SupportsDynamicToolOwner
包注册。 此值不是标准的 PackageRegistrationAttribute一部分,因此必须创建自定义属性才能添加它。 有关自定义属性的详细信息,请参阅 使用自定义注册属性注册扩展。
用于 FindToolWindow 打开工具窗口。 根据需要创建工具窗口。
注意
用户可以关闭动态工具窗口。 如果要创建菜单命令以便用户可以重新打开工具窗口,则应在打开工具窗口的同一 UI 上下文中启用菜单命令,否则将其禁用。
打开动态工具窗口
创建名为 DynamicToolWindow 的 VSIX 项目,并添加名为 DynamicWindowPane.cs 的工具窗口项模板。 有关详细信息,请参阅 使用工具窗口创建扩展。
在 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 就会打开,否则关闭。
生成项目并启动调试。 应显示实验实例。 不应看到工具窗口。
在实验实例中打开项目。 此时应显示工具窗口。