我正在创建一个VSIX包,我在项目节点的上下文菜单中添加了一个项目(当您右键单击解决方案资源管理器中的项目时,将显示上下文菜单)。
我的项目是一个菜单,我有这个工作。我一直在读这篇文章: https://msdn.microsoft.com/en-us/library/bb166492.aspx
它说,为了填充菜单,我需要在菜单上创建一个项目,该项目将在运行时被项目列表替换。
这一切都很好。当我完全按照这篇文章,我得到一个项目列表,我可以选择一个作为我的解决方案的启动项目。
但文章没有提到的是这个列表是如何填充的。在文章中没有提到它 - 它似乎只是通过某种伏都教来工作。我不想要一个项目列表,我想用其他东西填充项目列表。我一直在我的桌子上敲我的头2天,我似乎无法弄明白。
如何使用我自己的自定义项目列表替换替换项目?
答案 0 :(得分:1)
我最近不得不这样做并同意这个例子并不明显。我也希望只在某个地方填充一个菜单项列表,但事情并非那么简单。我已经在github上发布了我的演示样本,这可能有所帮助。在我的情况下,我想在某些解决方案资源管理器项目(文件夹和项目)上的右键单击上下文菜单中添加动态菜单列表。我需要这个用于我在T4脚手架扩展T4 Awesome中处理的功能。
最终让它为我点击的事情是弄清楚我没有添加菜单的列表,而是Visual Studio调用你一遍又一遍地提供的一组方法,直到你告诉它停止。每次通话都会设置不同的菜单项。以下是github上自述文件的摘要,它对此进行了解释。
您可以像在正常情况下一样在vsct文件中创建菜单和按钮 对于动态的那个,你需要添加命令标志:
<CommandFlag>DynamicItemStart</CommandFlag>
这向视觉工作室发出信号,表示您的菜单将是动态的。
您构建了一个可以管理菜单上显示内容的类。来自 ms示例他们构建了一个名为DynamicMenu的类,其工作是 注册动态菜单按钮并提供三种方法vs will 在遇到按钮时调用: OnBeforeQueryStatusDynamicItem,IsValidDynamicItem, OnInvokedDynamicItem。右键单击并调用上下文时 菜单,vs命中你的动态按钮,然后调用这些方法 并允许您根据需要设置任意数量的菜单项。该 IsValidDynamicItem方法通过返回来控制次数 你完成后就是假的。 OnBeforeQueryStatusDynamicItem可以让你 设置按钮的菜单文本。并且OnInvokedDynamicItem允许 您回复用户点击菜单项。