Alterar a aparência de um comando
Você pode fornecer comentários ao usuário alterando a aparência de um comando. Por exemplo, talvez você queira que um comando tenha uma aparência diferente quando não estiver disponível. Você pode tornar os comandos disponíveis ou indisponíveis, ocultá-los ou mostrá-los, ou marcá-los ou desmarcá-los no menu.
Para alterar a aparência de um comando, execute uma destas ações:
Especifique os sinalizadores apropriados na definição de comando no arquivo de tabela de comandos.
Use o OleMenuCommandService serviço.
Implemente a IOleCommandTarget interface e modifique os objetos de comando brutos.
As etapas a seguir mostram como localizar e atualizar a aparência de um comando usando o MPF (Managed Package Framework).
Para alterar a aparência de um comando de menu
Siga as instruções em Alterar o texto de um comando de menu para criar um item de menu chamado
New Text
.No arquivo ChangeMenuText.cs adicione a seguinte instrução using:
using System.Security.Permissions;
No arquivo ChangeMenuTextPackageGuids.cs adicione a seguinte linha:
public const string guidChangeMenuTextPackageCmdSet= "00000000-0000-0000-0000-00000000"; // get the GUID from the .vsct file
No arquivo ChangeMenuText.cs substitua o código no método ShowMessageBox com o seguinte:
private void Execute(object sender, EventArgs e) { ThreadHelper.ThrowIfNotOnUIThread(); var command = sender as OleMenuCommand; if (command.Text == "New Text") ChangeMyCommand(command.CommandID.ID, false); }
Obtenha o comando que você deseja atualizar do OleMenuCommandService objeto e, em seguida, defina as propriedades apropriadas no objeto de comando. Por exemplo, o método a seguir torna o comando especificado de um conjunto de comandos VSPackage disponível ou indisponível. O código a seguir torna o item de menu nomeado
New Text
indisponível depois de ter sido clicado.public bool ChangeMyCommand(int cmdID, bool enableCmd) { bool cmdUpdated = false; var mcs = this.package.GetService<IMenuCommandService, OleMenuCommandService>(); var newCmdID = new CommandID(new Guid(ChangeMenuTextPackageGuids.guidChangeMenuTextPackageCmdSet), cmdID); MenuCommand mc = mcs.FindCommand(newCmdID); if (mc != null) { mc.Enabled = enableCmd; cmdUpdated = true; } return cmdUpdated; }
Compile o projeto e comece a depuração. A instância experimental do Visual Studio deve aparecer.
No menu Ferramentas, clique no comando Invoke ChangeMenuText. Neste ponto, o nome do comando é Invoke ChangeMenuText, portanto, o manipulador de comandos não chama ChangeMyCommand().
No menu Ferramentas, agora você deve ver Novo texto. Clique em Novo Texto. O comando agora deve estar esmaecido.