如何在Visual Studio中以编程方式对VSIX包添加的菜单项进行排序?

时间:2014-01-27 17:38:27

标签: visual-studio vsix vspackage

我通过安装新的vsix软件包来安装新的菜单项。这是我得到的: screenshot

我尝试更改不同的值以使VS对我的菜单项进行排序,但没有运气。 这是我的.vsct文件的一部分:

<Buttons>
  <Button guid="guidWizardPackage2010Project" id="AddImpl" priority="0x0301" type="Button">
    <Parent guid="guidWizardPackage2010Project" id="MyMenuGroup" />
    <Icon guid="guidImages" id="logo" />
    <CommandFlag>DynamicVisibility</CommandFlag>
    <Strings>
      <CommandName>Add Implementation [VER]...</CommandName>
      <ButtonText>Add Implementation [VER]...</ButtonText>
    </Strings>
  </Button>
</Buttons>

...

<GuidSymbol name="guidVSPackage2012Pkg" value="{random generated}" />
<GuidSymbol name="guidWizardPackage2010Project" value="{random generated}">
  <IDSymbol name="MyMenuGroup" value="0x1020" />
  <IDSymbol name="AddImpl" value="0x0100" />
</GuidSymbol>

我尝试增加像&#34; MyMenuGroup&#34;这样的值。价值,&#34; AddImpl&#34; value,guids,priority =&#34; 0x0301&#34;希望其中一个用于排序,但不是。

我可以手动自定义订单,但应在安装后对其进行排序。

有没有办法以编程方式(自动)自定义或排序菜单项?

2 个答案:

答案 0 :(得分:1)

这是我复杂的解决方案(从Package.Initialize()运行):

        DTE2 dte = GetGlobalService(typeof (DTE)) as DTE2;
        CommandBars commandBars = (CommandBars) dte.CommandBars;
        CommandBar projectMenu = commandBars["Project"];

        CommandBarControl control = null;
        foreach (CommandBarControl barControl in projectMenu.Controls)
            if (...) // currently added control
            {
                control = barControl;
            }
                // finding new position for the control
        control.Move(projectMenu, newPosition); // move control to correct place
        control.BeginGroup = false;             // remove ugly separator above

我有很多控件,所以他们不应该同时运行这个代码,只是最后一个。 我希望你有更好的答案。

答案 1 :(得分:0)

优先级属性是控制菜单项相对顺序的属性。奇怪的是它不适合你。