Изменение текста команды меню
Ниже показано, как изменить текстовую метку команды меню с помощью IMenuCommandService службы.
Изменение метки команды меню с помощью IMenuCommandService
Создайте проект VSIX с именем
MenuText
команды меню с именем ChangeMenuText. Дополнительные сведения см. в разделе "Создание расширения" с помощью команды меню.В VSCT-файле добавьте
TextChanges
флаг в команду меню, как показано в следующем примере.<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 создайте обработчик событий, который будет вызываться перед отображением команды меню.
private void OnBeforeQueryStatus(object sender, EventArgs e) { var myCommand = sender as OleMenuCommand; if (null != myCommand) { myCommand.Text = "New Text"; } }
Вы также можете обновить состояние команды меню в этом методе, изменив VisibleCheckedсвойства объекта и Enabled свойства.OleMenuCommand
В конструкторе ChangeMenuText замените исходный код инициализации и размещения исходной командой кодом, создающим OleMenuCommand код (а не а
MenuCommand
), который представляет команду меню, добавляет BeforeQueryStatus обработчик событий и предоставляет команду меню в службу команд меню.Вот как это должно выглядеть:
private ChangeMenuText(AsyncPackage package, OleMenuCommandService commandService) { this.package = package ?? throw new ArgumentNullException(nameof(package)); commandService = commandService ?? throw new ArgumentNullException(nameof(commandService)); var menuCommandID = new CommandID(CommandSet, CommandId); var menuItem = new OleMenuCommand(this.Execute, menuCommandID); menuItem.BeforeQueryStatus += new EventHandler(OnBeforeQueryStatus); commandService.AddCommand(menuItem); }
Выполните сборку решения и запустите отладку. Появится экспериментальный экземпляр Visual Studio.
В меню "Сервис" должна появиться команда Invoke ChangeMenuText.
Щелкните команду. Появится окно сообщения с объявлением о вызове MenuItemCallback . При закрытии поля сообщения вы увидите, что имя команды в меню "Сервис" теперь является новым текстом.