若要了解有关 Visual Studio 2017 RC 的最新文档,请参阅 Visual Studio 2017 RC 文档。
下面的步骤演示如何通过更改菜单命令的文本标签IMenuCommandService服务。
创建一个名为的 VSIX 项目MenuText与菜单命令名为ChangeMenuText。 有关详细信息,请参阅使用菜单命令创建扩展。
在.vstc 文件中添加TextChanges标记,用于您的菜单命令,如下面的示例中所示。
XML <Button guid="guidChangeMenuTextPackageCmdSet" id="ChangeMenuTextId" priority="0x0100" type="Button"> <Parent guid="guidChangeMenuTextPackageCmdSet" id="MyMenuGroup" /> <Icon guid="guidImages" id="bmpPic1" /> <CommandFlag>TextChanges</CommandFlag> <Strings> <ButtonText>Invoke ChangeMenuText</ButtonText> </Strings> </Button>在 ChangeMenuText.cs 文件中,创建一个事件处理程序将在显示的菜单命令前调用。
C# private void OnBeforeQueryStatus(object sender, EventArgs e) { var myCommand = sender as OleMenuCommand; if (null != myCommand) { myCommand.Text = "New Text"; } }此外可以通过更改来更新此方法中的菜单命令的状态Visible, Checked,和已启用属性OleMenuCommand对象。
在 ChangeMenuText 构造函数中,用创建的代码替换原始命令初始化和放置代码OleMenuCommand (而不是MenuCommand) 表示的菜单命令,请添加BeforeQueryStatus事件处理程序,并提供到菜单命令服务菜单命令。
下面是什么它应如下所示︰
C# private ChangeMenuText(Package package) { if (package == null) { throw new ArgumentNullException(nameof(package)); } this.package = package; OleMenuCommandService commandService = this.ServiceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService; if (commandService != null) { CommandID menuCommandID = new CommandID(MenuGroup, CommandId); EventHandler eventHandler = this.ShowMessageBox; OleMenuCommand menuItem = new OleMenuCommand(ShowMessageBox, menuCommandID); menuItem.BeforeQueryStatus += new EventHandler(OnBeforeQueryStatus); commandService.AddCommand(menuItem); } }生成项目并启动调试。 将显示 Visual Studio 的实验实例。
在工具菜单上,您应该看到名为命令调用 ChangeMenuText。
单击命令。 您应该看到消息框宣布推出 MenuItemCallback 已被调用。 关闭该消息框,您应看到在工具菜单上命令的名称现在是新文本。