Есть задача написания AddIn'а для студи, который сделает в контектном меню CodeView отдельный пунктик с подменю, а пункты этого подменю можно было бы делать невидимыми в зависимости от различных ситуаций.
В начале всё просто.
Ищем CodeView меню:
_CommandBars cmdBars = (_CommandBars)_applicationObject.CommandBars;
CommandBar cmdBarCodeWindow = cmdBars["Code Window"];
Создаём подменю с именем 'MySubmenu':
CommandBar cmdBarAddonMenuBar = (CommandBar)commands.AddCommandBar(
"MySubmenu", vsCommandBarType.vsCommandBarTypeMenu, cmdBarCodeWindow, 1);
cmdBarAddonMenuBar.Enabled = true;
Далее делаются комманды через AddNamedCommand2() и добавляются контролы в моё подменю.
Контроллы добавляются таким кодом:
CommandBarButton btnDoSomth = (CommandBarButton)command.AddControl(cmdBarAddonMenuBar, 1);
И это всё при вызове OnConnect c параметром UISetup.
Далее пишется обработчик QueryStatus, и тут встречается трабл, даже если
ставить команде статус vsCommandStatus.vsCommandStatusInvisible или комбинащию
(vsCommandStatus)(vsCommandStatus.vsCommandStatusUnsupported | vsCommandStatus.vsCommandStatusInvisible)
пункт подменю пропадать не будет, он будет просто сереньким.
Есть мысль, что таким образом его спрятать нельзя, а можно спрятать используя проперти Visible
у объекта CommandBarButton, но тут есть загвоздка.
Когда мы только-только создали контроллы для команд, то они являются child'ами нашего
cmdBarAddonMenuBar'а (это легко проверить хотя-бы посмотрев значение cmdBarAddonMenuBar.Controls.Count).
А теперь перезапустим студию и у нас OnConnect вызовется с параметром Startup,
теперь если найти наш CommandBar с именем MySubmenu и посмотреть сколько у него child'ов
окажется что их 0, хотя само контекстное меню аддона работает норамльно и команды запускаются.
Отсюда вопрос, как найти объекты CommandBarButton принадлежащие командам?
или как по другому сделать пункты подменю невидимыми?