我正在使用C#VSIX项目为Visual Studio 2017开发扩展。我需要根据.ini文件中的设置创建可变数量的命令。我想创建最大数量的命令(因为在VSIX项目中,每个命令都需要一个新的.cs文件),并且只启用.ini文件中编写的命令。不幸的是我不知道如何禁用命令。我需要在布尔值变为true时启用命令。
我已经看到我需要使用OleMenuCommand类,但我没有Initialize()和StatusQuery()方法。如何动态启用命令?
要在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;
}
当您使用OleMenuCommandService创建要添加的OleMenuCommand时,您可以订阅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();
}