Alterar o texto de um comando de menu
As etapas a seguir mostram como alterar o rótulo de texto de um comando de menu usando o IMenuCommandService serviço.
Alterando um rótulo de comando de menu com o IMenuCommandService
Crie um projeto VSIX nomeado
MenuText
com um comando de menu chamado ChangeMenuText. Para obter mais informações, consulte Criar uma extensão com um comando de menu.No arquivo .vsct, adicione o
TextChanges
sinalizador ao comando de menu, conforme mostrado no exemplo a seguir.<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>
No arquivo ChangeMenuText.cs crie um manipulador de eventos que será chamado antes que o comando de menu seja exibido.
private void OnBeforeQueryStatus(object sender, EventArgs e) { var myCommand = sender as OleMenuCommand; if (null != myCommand) { myCommand.Text = "New Text"; } }
Você também pode atualizar o status do comando de menu nesse método alterando as Visiblepropriedades , Checkede Enabled no OleMenuCommand objeto.
No construtor ChangeMenuText, substitua o código de inicialização e posicionamento do comando original pelo código que cria um (em vez de um OleMenuCommand
MenuCommand
) que representa o comando menu, adiciona o manipulador de eventos e fornece o BeforeQueryStatus comando menu ao serviço de comando menu.Aqui está como deve ser:
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); }
Compile o projeto e comece a depuração. A instância experimental do Visual Studio aparece.
No menu Ferramentas, você verá um comando chamado Invoke ChangeMenuText.
Clique no comando. Você verá a caixa de mensagem anunciando que MenuItemCallback foi chamado. Quando você descarta a caixa de mensagem, você deve ver que o nome do comando no menu Ferramentas agora é Novo texto.