描述
我开发了一个 Visual Studio 扩展 (VSPackage),它向 Visual Studio 添加了新的项目类型(使用CPS 项目系统)。我还向 VSPackage 添加了一些命令。
当右键单击解决方案资源管理器中的项目节点时,我希望显示一个自定义的上下文菜单。
例子
mycommand)。
我试过..
Parent将我的自定义命令
设置为IDM_VS_CTXT_PROJNODE.
问题
当我创建新的自定义项目类型时,如何在解决方案资源管理器中为我的项目节点创建新的上下文菜单?
如何仅针对自定义项目将命令删除/添加到上下文菜单:如果我有一个C#项目,则上下文菜单应该是默认菜单,如果我添加一个MyProjectType项目,我希望在右键单击该项目时看到不同的上下文菜单解决方案资源管理器中的项目节点。
你和IDM_VS_CTXT_PROJNODE父母关系很亲密。
以下是我在FluentMigratorRunner扩展中实现它的方法,该扩展仅显示项目的上下文菜单项(如果该项目具有对 FluentMigrator NuGet 包的引用)。
第 1 步:将子菜单添加到上下文菜单
<Menus>
<Menu guid="guidCmdSet" id="packageMenu" priority="0x0300" type="Menu">
<Parent guid="guidSHLMainMenu" id="IDG_VS_CTXT_PROJECT_BUILD" />
<CommandFlag>DynamicVisibility</CommandFlag>
<CommandFlag>DefaultInvisible</CommandFlag>
<Strings>
<ButtonText>CPSProject</ButtonText>
<CommandName>CPSProject</CommandName>
</Strings>
</Menu>
Run Code Online (Sandbox Code Playgroud)
请注意添加的特殊CommandFlag元素。
第 2 步:将组添加到菜单
<Groups>
<Group guid="guidCmdSet" id="packageMenuGroup" priority="0x0600">
<Parent guid="guidCmdSet" id="packageMenu" />
</Group>
</Groups>
Run Code Online (Sandbox Code Playgroud)
第 3 步:添加按钮
<Button guid="guidCmdSet" id="specialBuildActionId" priority="0x0100" type="Button">
<Parent guid="guidCmdSet" id="packageMenuGroup" />
<CommandFlag>DynamicVisibility</CommandFlag>
<Strings>
<ButtonText>Special build</ButtonText>
</Strings>
Run Code Online (Sandbox Code Playgroud)
第 4 步:在 *Package.cs 中添加菜单
protected override async System.Threading.Tasks.Task InitializeAsync(System.Threading.CancellationToken cancellationToken, IProgress<ServiceProgressData> progress)
{
// Initialize the Fluent Migrator Menu, should only be visible for projects with FluentMigrator reference
var mcs = await GetServiceAsync(typeof(IMenuCommandService)) as OleMenuCommandService;
var menuCommandId = new CommandID(packageCmdSetGuidString, 0x1010);
var menuItem = new OleMenuCommand(null, menuCommandId);
menuItem.BeforeQueryStatus += MenuItem_BeforeQueryStatus;
mcs.AddCommand(menuItem);
}
private void MenuItem_BeforeQueryStatus(object sender, EventArgs e) =>
((OleMenuCommand)sender).Visible = ???;
Run Code Online (Sandbox Code Playgroud)
请注意添加的BeforeQueryStatus事件处理程序。
在该事件处理程序中,您可以检查项目的类型并返回一个布尔值,控制是否应显示额外的上下文菜单是或否
| 归档时间: |
|
| 查看次数: |
2355 次 |
| 最近记录: |