Visual Studio SDK 作为 Visual Studio 设置中的可选功能包含在内。 有关详细信息,请参阅
安装 Visual Studio SDK
。
使用 VSIX 模板创建名为
FirstToolWindow
的项目,并添加名为
FirstToolWindow
的自定义工具窗口项模板。
有关使用工具窗口创建扩展的详细信息,请参阅
使用工具窗口
创建扩展。
删除默认控件。 打开
FirstToolWindowControl.xaml
并删除
“单击我!”
按钮。
在工具箱中
,展开“
所有 WPF 控件”部分,
并将媒体元素
控件
拖动到
FirstToolWindowControl
窗体。 选择控件,然后在
“属性”
窗口中将此元素
命名为 mediaElement1
。
通过采用以下方式添加工具栏,可以保证其渐变和颜色与 IDE 的其余部分保持一致。
在
解决方案资源管理器
中,打开
FirstToolWindowPackage.vsct
。
.vsct
文件使用 XML 定义工具窗口中的图形用户界面(GUI)元素。
在节中
<Symbols>
,找到
<GuidSymbol>
其属性为
guidFirstToolWindowPackageCmdSet
. 的
name
节点。 将以下两
<IDSymbol>
个元素添加到此节点中的元素列表中
<IDSymbol>
,以定义工具栏和工具栏组。
<IDSymbol name="ToolbarID" value="0x1000" />
<IDSymbol name="ToolbarGroupID" value="0x1001" />
在 <Buttons> 节的正上方,创建 <Menus> 如下所示的分区:
<Menus>
<Menu guid="guidFirstToolWindowPackageCmdSet" id="ToolbarID" priority="0x0000" type="ToolWindowToolbar">
<Parent guid="guidFirstToolWindowPackageCmdSet" id="ToolbarID" />
<Strings>
<ButtonText>Tool Window Toolbar</ButtonText>
<CommandName>Tool Window Toolbar</CommandName>
</Strings>
</Menu>
</Menus>
有多种不同类型的菜单。 此菜单是工具窗口中的工具栏,由其 type 属性定义。 设置guidid构成工具栏的完全限定 ID。 通常, <Parent> 菜单是包含组。 但是,工具栏被定义为其自己的父级。 因此,对元素<Parent>使用相同的<Menu>标识符。 该 priority 属性仅为“0”。
工具栏在许多方面都类似于菜单。 例如,就像菜单可能有一组命令一样,工具栏也可能具有组。 (在菜单上,命令组由水平线分隔。在工具栏上,组不由视觉分隔符分隔。
<Groups>添加包含元素的<Group>节。 这将定义在节中 <Symbols> 声明的 ID 的组。 在 <Groups> 节后面 <Menus> 添加分区。
<Groups>
<Group guid="guidFirstToolWindowPackageCmdSet" id="ToolbarGroupID" priority="0x0000">
<Parent guid="guidFirstToolWindowPackageCmdSet" id="ToolbarID" />
</Group>
</Groups>
通过将父 GUID 和 ID 设置为工具栏的 GUID 和 ID,将组添加到工具栏。
将命令添加到工具栏,该工具栏显示为按钮。
在该 <Symbols> 部分中,在工具栏和工具栏组声明之后声明以下 IDSymbol 元素。
<IDSymbol name="cmdidWindowsMedia" value="0x0100" />
<IDSymbol name="cmdidWindowsMediaOpen" value="0x132" />
在 <Buttons> 节中添加 Button 元素。 此元素将显示在工具窗口中的工具栏上,并带有 “搜索 ”(放大镜)图标。
<Button guid="guidFirstToolWindowPackageCmdSet" id="cmdidWindowsMediaOpen" priority="0x0101" type="Button">
<Parent guid="guidFirstToolWindowPackageCmdSet" id="ToolbarGroupID"/>
<Icon guid="guidImages" id="bmpPicSearch" />
<Strings>
<CommandName>cmdidWindowsMediaOpen</CommandName>
<ButtonText>Load File</ButtonText>
</Strings>
</Button>
打开 FirstToolWindowCommand.cs ,并在现有字段之后在类中添加以下行。
public const string guidFirstToolWindowPackageCmdSet = "00000000-0000-0000-0000-0000"; // get the GUID from the .vsct file
public const uint cmdidWindowsMedia = 0x100;
public const int cmdidWindowsMediaOpen = 0x132;
public const int ToolbarID = 0x1000;
这样做会使命令在代码中可用。
从工具栏控件的事件处理程序中,代码必须能够访问媒体播放器控件,该控件是 FirstToolWindowControl 类的子级。
在解决方案资源管理器中,右键单击 FirstToolWindowControl.xaml,单击“查看代码”,并将以下代码添加到 FirstToolWindowControl 类。
public System.Windows.Controls.MediaElement MediaPlayer
get { return mediaElement1; }
添加一个工具栏和一个菜单命令,该命令调用 “打开文件 ”对话框并播放所选媒体文件。
打开 FirstToolWindow.cs 并添加以下 using 指令:
using System.ComponentModel.Design;
using System.Windows.Forms;
using Microsoft.VisualStudio.Shell.Interop;
在 FirstToolWindow 类中,添加对 FirstToolWindowControl 控件的公共引用。
public FirstToolWindowControl control;
构造函数的末尾,将此控件变量设置为新创建的控件。
control = new FirstToolWindowControl();
base.Content = control;
实例化构造函数内的工具栏。
this.ToolBar = new CommandID(new Guid(FirstToolWindowCommand.guidFirstToolWindowPackageCmdSet),
FirstToolWindowCommand.ToolbarID);
this.ToolBarLocation = (int)VSTWT_LOCATION.VSTWT_TOP;
此时,FirstToolWindow 构造函数应如下所示:
public FirstToolWindow() : base(null)
this.Caption = "FirstToolWindow";
this.BitmapResourceID = 301;
this.BitmapIndex = 1;
control = new FirstToolWindowControl();
base.Content = control;
this.ToolBar = new CommandID(new Guid(FirstToolWindowCommand.guidFirstToolWindowPackageCmdSet),
FirstToolWindowCommand.ToolbarID);
this.ToolBarLocation = (int)VSTWT_LOCATION.VSTWT_TOP;
将菜单命令添加到工具栏。 在 FirstToolWindowCommand.cs 类中,添加以下 using 指令:
using System.Windows.Forms;
在 FirstToolWindowCommand 类中,在 ShowToolWindow() 方法的末尾添加以下代码。 ButtonHandler 命令将在下一部分中实现。
// Create the handles for the toolbar command.
var mcs = this.ServiceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
var toolbarbtnCmdID = new CommandID(new Guid(FirstToolWindowCommand.guidFirstToolWindowPackageCmdSet),
FirstToolWindowCommand.cmdidWindowsMediaOpen);
var menuItem = new MenuCommand(new EventHandler(
ButtonHandler), toolbarbtnCmdID);
mcs.AddCommand(menuItem);
在 FirstToolWindowCommand 类中,添加调用“打开文件”对话框的 ButtonHandler 方法。 选择文件时,它会播放媒体文件。
在 FirstToolWindowCommand 类中,添加对在 FindToolWindow() 方法中创建的 FirstToolWindow 窗口的专用引用。
private FirstToolWindow window;
更改 ShowToolWindow() 方法以设置上面定义的窗口(以便 ButtonHandler 命令处理程序可以访问窗口控件)。 下面是完整的 ShowToolWindow() 方法。
private void ShowToolWindow(object sender, EventArgs e)
window = (FirstToolWindow) this.package.FindToolWindow(typeof(FirstToolWindow), 0, 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());
var mcs = this.ServiceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
var toolbarbtnCmdID = new CommandID(new Guid(FirstToolWindowCommandguidFirstToolWindowPackageCmdSet),
FirstToolWindowCommand.cmdidWindowsMediaOpen);
var menuItem = new MenuCommand(new EventHandler(
ButtonHandler), toolbarbtnCmdID);
mcs.AddCommand(menuItem);
添加 ButtonHandler 方法。 它为用户创建 OpenFileDialog 以指定要播放的媒体文件,然后播放所选文件。
private void ButtonHandler(object sender, EventArgs arguments)
OpenFileDialog openFileDialog = new OpenFileDialog();
DialogResult result = openFileDialog.ShowDialog();
if (result == DialogResult.OK)
window.control.MediaPlayer.Source = new System.Uri(openFileDialog.FileName);
接下来,在 IDE 中为工具窗口指定默认位置。 工具窗口的配置信息位于 FirstToolWindowPackage.cs 文件中。
在 FirstToolWindowPackage.cs中,查找 ProvideToolWindowAttribute 类上的 FirstToolWindowPackage 属性,该属性将 FirstToolWindow 类型传递给构造函数。 若要指定默认位置,必须向以下示例的构造函数添加更多参数。
[ProvideToolWindow(typeof(FirstToolWindow),
Style = Microsoft.VisualStudio.Shell.VsDockStyle.Tabbed,
Window = "3ae79031-e1bc-11d0-8f78-00a0c9110057")]
第一个命名参数是 Style 及其值 Tabbed,这意味着窗口将是现有窗口中的选项卡。 停靠位置由Window参数指定,在本例中为解决方案资源管理器的 GUID。
有关 IDE 中窗口类型的详细信息,请参阅 vsWindowType。
按 F5 打开 Visual Studio 实验版的新实例。
在 “视图 ”菜单上,指向 “其他窗口 ”,然后单击“ 第一个工具窗口”。
媒体播放器工具窗口应以与解决方案资源管理器相同的位置打开。 如果它仍然与之前的位置相同,请重置窗口布局(窗口/重置窗口布局)。
单击工具窗口中的 按钮(它具有“搜索 ”图标)。 选择受支持的声音或视频文件, 例如 C:\windows\media\chimes.wav,然后按 “打开”。
你应该听到声音。
命令、菜单和工具栏