如何在VS2019扩展中创建可停靠的自定义工具窗口
VS扩展可停靠工具窗口实现步骤
以下步骤基于你已完成的VSIX项目基础配置、菜单命令可正常触发的前提操作:
- 步骤1:添加工具窗口项
右键你的VSIX项目,选择「添加 -> 新建项」,在左侧分类中选择「扩展性」,找到「工具窗口」项,自定义名称后确认添加。模板会自动生成3个核心文件:- 工具窗口配置类(如
MyToolWindow.cs):定义窗口的基础属性、停靠行为 - 控件布局文件(如
MyToolWindowControl.xaml):即你所说的空白画布,所有自定义控件都在此处添加 - 配套命令类(如
MyToolWindowCommand.cs):如果你已经有现成的命令入口,可直接删除该自动生成的命令类
- 工具窗口配置类(如
- 步骤2:验证工具窗口注册配置
打开你项目中继承自AsyncPackage/Package的主类,确认类上方已自动添加[ProvideToolWindow(typeof(你的工具窗口配置类名))]特性,没有的话手动补加即可。 - 步骤3:修改菜单命令的执行逻辑
打开你现有的命令类,找到Execute方法,替换原有的弹窗代码为以下逻辑:
注意:如果你的命令类中没有直接可用的using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; private void Execute(object sender, EventArgs e) { ThreadHelper.ThrowIfNotOnUIThread(); // 此处替换为你自己的工具窗口配置类名 var toolWindow = Package.FindToolWindow(typeof(MyToolWindow), 0, true); if (toolWindow == null || toolWindow.Frame == null) { throw new NotSupportedException("工具窗口创建失败"); } var windowFrame = (IVsWindowFrame)toolWindow.Frame; ErrorHandler.ThrowOnFailure(windowFrame.Show()); }Package实例,可通过Package.GetGlobalService(typeof(你的Package类))的方式获取 - 步骤4:自定义工具窗口内容
打开自动生成的xaml布局文件,即可像普通WPF项目一样添加按钮、文本框、表格等控件,编写对应的交互逻辑即可。示例代码参考:<UserControl x:Class="YourNamespace.MyToolWindowControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid Background="{DynamicResource VsBrush.Window}"> <StackPanel Margin="16"> <TextBox x:Name="InputBox" Margin="0 0 0 12" PlaceholderText="请输入内容"/> <Button Content="点击测试" Click="Button_Click"/> </StackPanel> </Grid> </UserControl> - 步骤5:调试验证
按下F5启动VS实验实例,点击扩展菜单下的对应入口,即可弹出可停靠的工具窗口,支持拖放停靠到VS界面的任意位置,行为和Toolbox、Task List完全一致。
常见问题排查:如果窗口无法弹出,检查工具窗口配置类的Guid是否唯一,不要和项目内其他组件的Guid重复
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

