创建多实例工具窗口
可以编程工具窗口,以便可以同时打开它的多个实例。 默认情况下,工具窗口只能打开一个实例。
使用多实例工具窗口时,可以同时显示多个相关的信息源。 例如,可以在多实例工具窗口中放置多行 TextBox 控件,以便在编程会话期间同时提供多个代码片段。 此外,还可以在多实例工具窗口中放置控件 DataGrid 和下拉列表框,以便可以同时跟踪多个实时数据源。
创建基本(单实例)工具窗口
使用 VSIX 模板创建名为 MultiInstanceToolWindow 的项目,并添加名为 MIToolWindow 的自定义工具窗口项模板。
注意
有关使用工具窗口创建扩展的详细信息,请参阅 使用工具窗口创建扩展。
创建工具窗口多实例
打开 MIToolWindowPackage.cs 文件并查找
ProvideToolWindow
属性。MultiInstances=true
和参数,如以下示例所示:[PackageRegistration(UseManagedResourcesOnly = true)] [InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)] // Info on this package for Help/About [ProvideMenuResource("Menus.ctmenu", 1)] [ProvideToolWindow(typeof(MultiInstanceToolWindow.MIToolWindow), MultiInstances = true)] [Guid(MIToolWindowPackage.PackageGuidString)] public sealed class MIToolWindowPackage : Package {. . .}
在 MIToolWindowCommand.cs 文件中,找到
ShowToolWindos()
该方法。 在此方法中 FindToolWindow ,调用该方法并设置其create
标志false
,以便它将循环访问现有工具窗口实例,直到找到可用id
实例。若要创建工具窗口实例,请调用 FindToolWindow 该方法并将其
id
设置为可用值及其create
标志true
。默认情况下,方法
0
的参数FindToolWindow值为id
。 此值将创建一个单实例工具窗口。 要托管多个实例,每个实例必须有自己的唯id
一性。对ShowIVsWindowFrame工具窗口实例的属性返回Frame的对象调用该方法。
默认情况下,
ShowToolWindow
工具窗口项模板创建的方法将创建单实例工具窗口。 以下示例演示如何修改ShowToolWindow
方法以创建多个实例。private void ShowToolWindow(object sender, EventArgs e) { for (int i = 0; i < 10; i++) { ToolWindowPane window = this.package.FindToolWindow(typeof(MIToolWindow), i, false); if (window == null) { // Create the window with the first free ID. window = (ToolWindowPane)this.package.FindToolWindow(typeof(MIToolWindow), i, true); if ((null == window) || (null == window.Frame)) { throw new NotSupportedException("Cannot create tool window"); } IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame; Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(windowFrame.Show()); break; } } }