您的位置:首页 > 其它

4.2添加一个工具窗口

2017-07-17 08:35 363 查看


添加一个工具窗口

Visual Studio 2015

其他版本



 

若要了解有关 Visual Studio 2017 RC 的最新文档,请参阅 Visual Studio 2017 RC 文档

在本演练中,您将学习如何创建工具窗口,然后将其集成到 Visual Studio 中,按以下方式︰

将控件添加到工具窗口中。

将工具栏添加到工具窗口。

将命令添加到工具栏。

实现命令。

设置工具窗口中的默认位置。


先决条件



启动 Visual Studio 2015 中,您并不安装 Visual Studio SDK 从下载中心获得。 它将包括作为 Visual Studio 安装程序中的可选功能。 您还可以在以后安装 VS SDK。 有关详细信息,请参阅安装
Visual Studio SDK。


创建工具窗口



创建一个名为项目FirstToolWin使用 VSIX 模板,并将添加一个名为的自定义工具窗口项模板FirstToolWindow。


 说明
有关使用一个工具窗口创建扩展的详细信息,请参阅使用一个工具窗口创建扩展


将控件添加到工具窗口



删除默认控件。 打开 FirstToolWindowControl.xaml 并删除Click Me ! 按钮。

在工具箱,展开所有 WPF 控件部分并拖动媒体元素控制转移到FirstToolWindowControl窗体。 选择该控件,然后在属性窗口中,将此元素的命名mediaElement1。


将工具栏添加到工具窗口



通过以下方式添加工具栏,您保证其渐变样式和颜色是与 IDE 的其余部分一致的。

在解决方案资源管理器,打开 FirstToolWindowPackage.vsct。 .Vsct 文件使用 XML 工具窗口中定义的图形用户界面 (GUI) 元素。

<Symbols>
部分中,找到
<GuidSymbol>
节点其
name
属性是
guidFirstToolWindowPackageCmdSet

添加以下两个
<IDSymbol>
元素的列表与
<IDSymbol>
此节点来定义一个工具栏和工具栏组中的元素。

XML

<IDSymbol name="ToolbarID" value="0x1000" />
<IDSymbol name="ToolbarGroupID" value="0x1001" />


上方紧靠
<Buttons>
部分中,创建
<Menus>
部分如下︰

XML

<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
属性。 
guid
id
设置构成工具栏上的完全限定
ID。 通常情况下,
<Parent>
菜单的是包含组。 但是,工具栏被指其自身的上级。 因此,相同的标识符用于
<Menu>
<Parent>
元素。 
priority
属性是只是"0。

工具栏类似于在许多方面的菜单。 例如,就像一个菜单可能会有一组命令,工具栏可能还有组。 (在菜单上的命令组隔开水平线条。 在工具栏上的组不隔开 visual 分隔线。)

添加
<Groups>
节,其中包含
<Group>
元素。
用于定义组中声明其 ID
<Symbols>
部分。 添加
<Groups>
紧后面部分
<Menus>
部分。

XML

<Groups>
<Group guid="guidFirstToolWindowPackageCmdSet" id="ToolbarGroupID" priority="0x0000">
<Parent guid="guidFirstToolWindowPackageCmdSet" id="ToolbarID" />
</Group>
</Groups>


通过将父 GUID 和 ID 设置为 GUID 和 ID 的工具栏上,您将组添加到工具栏。


将命令添加到工具栏



将命令添加到工具栏上,显示为一个按钮。

<Symbols>
节中,在工具栏和工具栏之后组声明声明以下 IDSymbol 元素。

XML

<IDSymbol name="cmdidWindowsMedia" value="0x0100" />
<IDSymbol name="cmdidWindowsMediaOpen" value="0x132" />


添加按钮元素内的
<Buttons>
部分。 此元素将显示在工具窗口中,带搜索 (放大镜) 图标中的工具栏。

XML

<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 并恰好在现有字段之后的类中添加以下行。

C#

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;


执行此操作使您的命令可在代码中。



MediaPlayer 属性添加到 FirstToolWindowControl



工具栏控件的事件处理程序,从您的代码必须能够访问媒体播放器控件,这是 FirstToolWindowControl 类的子类。

在解决方案资源管理器,用鼠标右键单击 FirstToolWindowControl.xaml,单击查看代码,并将以下代码添加到 FirstToolWindowControl 类。

C#

public System.Windows.Controls.MediaElement MediaPlayer
{
get { return mediaElement1; }
}



实例化工具窗口和工具栏



添加一个工具栏和菜单命令调用打开的文件对话框,并在播放所选的媒体文件。

打开 FirstToolWindow.cs 并添加以下
using
语句。

C#

using System.ComponentModel.Design;
using System.Windows.Forms;
using Microsoft.VisualStudio.Shell.Interop;


在 FirstToolWindow 类中,添加对 FirstToolWindowControl 控件的公共引用。

C#

public FirstToolWindowControl control;


在构造函数结束时,向新创建的控件中设置此控制变量。

C#

control = new FirstToolWindowControl();
base.Content = control;


实例化在构造函数的工具栏。

C#

this.ToolBar = new CommandID(new Guid(FirstToolWindowCommand.guidFirstToolWindowPackageCmdSet),
FirstToolWindowCommand.ToolbarID);
this.ToolBarLocation = (int)VSTWT_LOCATION.VSTWT_TOP;


这个时候 FirstToolWindow 构造函数应如下所示︰

C#

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 语句

C#

using System.Windows.Forms;


在 FirstToolWindowCommand 类中,ShowToolWindow() 方法末尾添加下面的代码。 下一节中,将实现按钮处理程序命令。

C#

// 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 类中,添加按钮处理程序调用的方法,打开的文件对话框。 选择一个文件后,播放媒体文件。

在 FirstToolWindowCommand 类中,添加对 FirstToolWindow 窗口中获取 FindToolWindow() 方法中创建的私有引用。

C#

private FirstToolWindow window;


更改设置 (以便按钮处理程序命令处理程序可以访问该窗口控件上面定义窗口 ShowToolWindow() 方法。 下面是完整的 ShowToolWindow() 方法。

C#

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);
}


添加按钮处理程序方法。 创建用户指定的媒体文件,若要播放,对 OpenFileDialog,然后播放所选的文件。

C#

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 类型传递给构造函数。 若要指定默认位置,您必须将更多的参数添加到下面的示例的构造函数。

C#

[ProvideToolWindow(typeof(FirstToolWindow),
Style = Microsoft.VisualStudio.Shell.VsDockStyle.Tabbed,
Window = "3ae79031-e1bc-11d0-8f78-00a0c9110057")]


第一个命名的参数是
Style
,其值为
Tabbed
,这意味着该窗口将在现有的窗口的选项卡。
停靠的位置由指定
Window
参数,这种情况下,n 的 GUID解决方案资源管理器。


 说明
有关在 IDE 的窗口类型的详细信息,请参阅vsWindowType


测试工具窗口



按 f5 键以打开新的 Visual Studio 实验实例生成。

在视图菜单上,指向其他窗口,然后单击第一个工具窗口。

Media player 工具窗口应打开在同一个位置解决方案资源管理器。 如果它仍会出现在同一位置前面所述,重置窗口布局 (窗口 / 重置窗口布局)。

在工具窗口中单击 (它具有搜索图标) 按钮。 选择一个支持声音或视频文件,例如,C:\windows\media\chimes.wav,然后按打开。

你应该能听到钟声声音。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: