VSIX - 创建子菜单 - 如何填充子菜单“替换项”

时间:2015-12-09 14:50:41

标签: c# submenu vsix

我正在创建一个VSIX包,我在项目节点的上下文菜单中添加了一个项目(当您右键单击解决方案资源管理器中的项目时,将显示上下文菜单)。

我的项目是一个菜单,我有这个工作。我一直在读这篇文章: https://msdn.microsoft.com/en-us/library/bb166492.aspx

它说,为了填充菜单,我需要在菜单上创建一个项目,该项目将在运行时被项目列表替换。

这一切都很好。当我完全按照这篇文章,我得到一个项目列表,我可以选择一个作为我的解决方案的启动项目。

但文章没有提到的是这个列表是如何填充的。在文章中没有提到它 - 它似乎只是通过某种伏都教来工作。我不想要一个项目列表,我想用其他东西填充项目列表。我一直在我的桌子上敲我的头2天,我似乎无法弄明白。

如何使用我自己的自定义项目列表替换替换项目?

1 个答案:

答案 0 :(得分:1)

我最近不得不这样做并同意这个例子并不明显。我也希望只在某个地方填充一个菜单项列表,但事情并非那么简单。我已经在github上发布了我的演示样本,这可能有所帮助。在我的情况下,我想在某些解决方案资源管理器项目(文件夹和项目)上的右键单击上下文菜单中添加动态菜单列表。我需要这个用于我在T4脚手架扩展T4 Awesome中处理的功能。

最终让它为我点击的事情是弄清楚我没有添加菜单的列表,而是Visual Studio调用你一遍又一遍地提供的一组方法,直到你告诉它停止。每次通话都会设置不同的菜单项。以下是github上自述文件的摘要,它对此进行了解释。

  

您可以像在正常情况下一样在vsct文件中创建菜单和按钮   对于动态的那个,你需要添加命令标志:

<CommandFlag>DynamicItemStart</CommandFlag> 
     

这向视觉工作室发出信号,表示您的菜单将是动态的。

     

您构建了一个可以管理菜单上显示内容的类。来自   ms示例他们构建了一个名为DynamicMenu的类,其工作是   注册动态菜单按钮并提供三种方法vs will   在遇到按钮时调用:   OnBeforeQueryStatusDynamicItem,IsValidDynamicItem,   OnInvokedDynamicItem。右键单击并调用上下文时   菜单,vs命中你的动态按钮,然后调用这些方法   并允许您根据需要设置任意数量的菜单项。该   IsValidDynamicItem方法通过返回来控制次数   你完成后就是假的。 OnBeforeQueryStatusDynamicItem可以让你   设置按钮的菜单文本。并且OnInvokedDynamicItem允许   您回复用户点击菜单项。