내 VS 확장 프로그램에서 새 프로젝트 유형에 대한 메뉴 항목을 추가해야합니다. 하지만 내 맞춤 유형에만 표시하고 싶습니다. 그래서 파일 .vcst이 코드 추가 :메뉴 항목의 동적 표시
<Button guid="_Interactive_WindowCmdSet" id="cmdidLoadUI" priority="0x0100" type="Button">
<Parent guid="_Interactive_WindowCmdSet" id="ProjectItemMenuGroup" />
<Icon guid="guidImages" id="bmpPic1" />
<CommandFlag>DynamicVisibility</CommandFlag>
<Strings>
<ButtonText>Load</ButtonText>
</Strings>
</Button>
<Group guid="_Interactive_WindowCmdSet" id="ProjectItemMenuGroup" priority="0x0600">
<Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_PROJNODE"/>
</Group>
를 초기화 패키지로이 코드를 추가 :
// Create the command for the menu item.
CommandID projectMenuCommandID = new CommandID(GuidList.Interactive_WindowCmdSet, (int)PkgCmdIDList.cmdidLoadUI);
OleMenuCommand projectmenuItem = new OleMenuCommand(LoadUIMenuItemCallback, projectMenuCommandID);
projectmenuItem.BeforeQueryStatus += projectmenuItem_BeforeQueryStatus;
mcs.AddCommand(projectmenuItem);
그리고 쿼리 상태 핸들러는 다음과 같습니다 문제는
private void projectmenuItem_BeforeQueryStatus(object sender, EventArgs e)
{
OleMenuCommand menuCommand = sender as OleMenuCommand;
if (menuCommand != null)
menuCommand.Visible = IsProjectOfRightType(GetSelected<Project>());
}
을 -이 상태 핸들러가 호출되지 않습니다. 따라서 모든 프로젝트 유형에 대해이 메뉴 항목이 표시되었습니다.
내가 좋아하는, 내 패키지에 IOleCommandTarget
인터페이스를 구현하는 것이 시도했다 :
public int QueryStatus(ref Guid guidCmdGroup, uint cCmds, OLECMD[] prgCmds, IntPtr pCmdText)
{
// Disable all commands in case if project is VisuaART project, otherwise - disable them.
OLECMDF cmdf;
for (int i = 0; i < cCmds; i++)
{
var command = prgCmds[i];
if (command.cmdID == PkgCmdIDList.cmdidLoadUI)
{
if (IsProjectOfRightType(GetSelected<Project>()))
command.cmdf = (uint)COMMAND_SUPPORTED;
else
command.cmdf = (uint)COMMAND_UNSUPPORTED;
}
}
return VSConstants.S_OK;
}
private const OLECMDF COMMAND_SUPPORTED = OLECMDF.OLECMDF_SUPPORTED | OLECMDF.OLECMDF_ENABLED;
private const OLECMDF COMMAND_UNSUPPORTED = OLECMDF.OLECMDF_INVISIBLE;
하지만 그 중 하나가 도움이되지 않습니다. 메서드가 호출되었지만 OLECMDF.OLECMDF_INVISIBLE
을 설정하면 아무 작업도 수행되지 않습니다. 지원되지 않는 메뉴 항목에 대해이 메뉴 항목을 숨기려면 어떻게해야합니까?
UI 컨텍스트 GUID 가능성은 여기를 참조하십시오. https://msdn.microsoft.com/en-us/library/bb166496.aspx 위 페이지에서 GUID를 볼 수 있으며 UICONTEXT_SolutionExists를 의미합니다. – CSA