Я создаю пакет Visual Studio (это мой первый раз), и моя конечная цель - создать элемент контекстного меню для исследователя решений, который работает только с определенными типами файлов. (Я думал, что это будет обычным делом, но на нем не найдены приличные учебные пособия, поэтому, если вы знаете, пожалуйста, дайте мне знать)
Я следил за простым руководством MSDN, чтобы сначала создать элемент на панели инструментов (я забыл, где это было, чтобы связать его), и это сработало нормально.
Затем я нашел способ переместить его в контекстное меню Solution Explorer. Это было достигнуто путем манипулирования файлом .vsct
и имеющим такой элемент:
<Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_ITEMNODE"/>
Это, вероятно, не имеет значения, но я пытаюсь установить сцену.
Теперь, поскольку я хочу показывать только элемент для определенных типов файлов, мне нужно найти способ проверить файл при нажатии правой кнопки мыши. Вырезав длинный поиск, я нашел это, и в итоге появился следующий код:
protected override void Initialize()
{
//stuff
OleMenuCommandService mcs = GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
menuItem.BeforeQueryStatus += menuItem_BeforeQueryStatus;
//more stuff
}
void menuItem_BeforeQueryStatus(object sender, EventArgs e)
{
var myCommand = sender as OleMenuCommand;
myCommand.Text = "NEW NAME";
}
В приведенном выше примере я просто пытаюсь установить текст, чтобы попытаться доказать, что он работает, я знаю, что есть свойство Visible
, но я хочу, чтобы этот шаг работал первым. Событие BeforeQueryStatus
запускается, и отладка показывает выполнение кода, как ожидалось. Однако в контекстном меню нет изменений, он остается с исходным текстом.
Что мне здесь не хватает? Почему он не обновляется?