Změna textu příkazu nabídky

Následující kroky ukazují, jak změnit textový popisek příkazu nabídky pomocí IMenuCommandService služby.

Změna popisku příkazu nabídky pomocí IMenuCommandService

  1. Vytvořte projekt VSIX s názvem MenuText příkazu nabídky s názvem ChangeMenuText. Další informace najdete v tématu Vytvoření rozšíření pomocí příkazu nabídky.

  2. V souboru .vsct přidejte TextChanges příznak do příkazu nabídky, jak je znázorněno v následujícím příkladu.

    <Button guid="guidChangeMenuTextPackageCmdSet" id="ChangeMenuTextId" priority="0x0100" type="Button">
        <Parent guid="guidChangeMenuTextPackageCmdSet" id="MyMenuGroup" />
        <Icon guid="guidImages" id="bmpPic1" />
        <CommandFlag>TextChanges</CommandFlag>
        <Strings>
            <ButtonText>Invoke ChangeMenuText</ButtonText>
        </Strings>
    </Button>
    
  3. V souboru ChangeMenuText.cs vytvořte obslužnou rutinu události, která bude volána před zobrazením příkazu nabídky.

    private void OnBeforeQueryStatus(object sender, EventArgs e)
    {
        var myCommand = sender as OleMenuCommand;
        if (null != myCommand)
        {
            myCommand.Text = "New Text";
        }
    }
    

    Můžete také aktualizovat stav příkazu nabídky v této metodě změnou Visible, Checkeda Enabled vlastnosti objektu OleMenuCommand .

  4. V konstruktoru ChangeMenuText nahraďte původní inicializace příkazu a kód umístění kódem, který vytvoří OleMenuCommand (místo MenuCommand) představující příkaz nabídky, přidá obslužnou rutinu BeforeQueryStatus události a poskytne příkaz nabídky do služby příkazu nabídky.

    Takto by měl vypadat:

    private ChangeMenuText(AsyncPackage package, OleMenuCommandService commandService)
    {
        this.package = package ?? throw new ArgumentNullException(nameof(package));
        commandService = commandService ?? throw new ArgumentNullException(nameof(commandService));
    
        var menuCommandID = new CommandID(CommandSet, CommandId);
        var menuItem = new OleMenuCommand(this.Execute, menuCommandID);
        menuItem.BeforeQueryStatus += new EventHandler(OnBeforeQueryStatus);
        commandService.AddCommand(menuItem);
    }
    
  5. Sestavte projekt a spusťte ladění. Zobrazí se experimentální instance sady Visual Studio.

  6. V nabídce Nástroje by se měl zobrazit příkaz s názvem Invoke ChangeMenuText.

  7. Klikněte na příkaz. Mělo by se zobrazit okno se zprávou s oznámením, že MenuItemCallback byl volán. Když zavřete okno se zprávou, měli byste vidět, že název příkazu v nabídce Nástroje je nyní Nový text.