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
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.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>
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 .
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); }
Sestavte projekt a spusťte ladění. Zobrazí se experimentální instance sady Visual Studio.
V nabídce Nástroje by se měl zobrazit příkaz s názvem Invoke ChangeMenuText.
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.