Как включить / отключить команду в проекте Visual Studio 2017 VSIX C#
Я разрабатываю расширение для Visual Studio 2017 с использованием проекта C# VSIX. Мне нужно создать переменное количество команд на основе настроек в INI-файле. Я думал создать максимальное количество команд (потому что в проекте VSIX каждая команда нуждается в новом файле.cs) и включить только команды, записанные в файле.ini. К сожалению, я не знаю, как отключить команду. Мне нужно включить команды, когда логическое становится истиной.
Я видел, что мне нужно использовать класс OleMenuCommand, но у меня нет методов Initialize() и StatusQuery(). Как я могу динамически включить мои команды?
2 ответа
Когда вы создаете OleMenuCommand для добавления с помощью OleMenuCommandService, вы можете подписаться на событие BeforeQueryStatus и внутри него динамически включать / отключать команду:
private void OnQueryStatus(object sender)
{
Microsoft.VisualStudio.Shell.OleMenuCommand menuCommand =
sender as Microsoft.VisualStudio.Shell.OleMenuCommand;
if (menuCommand != null)
menuCommand.Visible = menuCommand.Enabled = MyCommandStatus();
}
Чтобы включить / отключить команды в Visual Studio, вы можете подписаться на BeforeQueryStatus
событие вашего OleMenuCommand
:
myOleMenuCommand.BeforeQueryStatus += QueryCommandHandler;
private void QueryCommandHandler(object sender)
{
var menuCommand = sender as Microsoft.VisualStudio.Shell.OleMenuCommand;
if (menuCommand != null)
menuCommand.Visible = menuCommand.Enabled = MyCommandStatus();
}
Возможная реализация MyCommandStatus()
Метод может быть:
public bool MyCommandStatus()
{
// do this if you want to disable your commands when the solution is not loaded
if (false == mDte.Solution.IsOpen)
return false;
// do this if you want to disable your commands when the Visual Studio build is running
else if (true == VsBuildRunning)
return false;
// Write any condition here
return true;
}