Изменение внешнего вида команды
Вы можете отправить отзыв пользователю, изменив внешний вид команды. Например, может потребоваться, чтобы команда выглядела иначе, если она недоступна. Вы можете сделать команды доступными или недоступными, скрыть или показать их, или проверка или отменить проверка их в меню.
Чтобы изменить внешний вид команды, выполните одно из следующих действий:
Укажите соответствующие флаги в определении команды в файле таблицы команд.
OleMenuCommandService Используйте службу.
Реализуйте интерфейс и измените IOleCommandTarget необработанные объекты команд.
Ниже показано, как найти и обновить внешний вид команды с помощью управляемой платформы пакетов (MPF).
Изменение внешнего вида команды меню
Следуйте инструкциям в разделе "Изменение текста команды меню", чтобы создать элемент меню с именем
New Text
.В файле ChangeMenuText.cs добавьте следующую инструкцию using:
using System.Security.Permissions;
В файле ChangeMenuTextPackageGuids.cs добавьте следующую строку:
public const string guidChangeMenuTextPackageCmdSet= "00000000-0000-0000-0000-00000000"; // get the GUID from the .vsct file
В файле ChangeMenuText.cs замените код в методе ShowMessageBox следующим образом:
private void Execute(object sender, EventArgs e) { ThreadHelper.ThrowIfNotOnUIThread(); var command = sender as OleMenuCommand; if (command.Text == "New Text") ChangeMyCommand(command.CommandID.ID, false); }
Получите команду, которую требуется обновить из OleMenuCommandService объекта, а затем задайте соответствующие свойства в объекте команды. Например, следующий метод делает указанную команду из набора команд VSPackage доступным или недоступным. Следующий код делает элемент
New Text
меню недоступным после нажатия кнопки.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; }
Выполните сборку решения и запустите отладку. Должен появиться экспериментальный экземпляр Visual Studio.
В меню "Сервис" щелкните команду Invoke ChangeMenuText. На этом этапе имя команды — Invoke ChangeMenuText, поэтому обработчик команд не вызывает ChangeMyCommand().
В меню "Сервис" теперь отображается новый текст. Нажмите кнопку " Создать текст". Теперь команда должна быть неактивной.