Sdílet prostřednictvím


Zpřístupnění příkazů

Když do sady Visual Studio přidáte více balíčků VSPackage, uživatelské rozhraní se může přetěžovat příkazy. Balíček můžete naprogramovat, abyste tento problém snížili následujícím způsobem:

  • Naprogramujte balíček tak, aby byl načten pouze v případech, kdy ho uživatel vyžaduje.

  • Naprogramujte balíček tak, aby se jeho příkazy zobrazovaly pouze v případě, že se můžou vyžadovat v kontextu aktuálního stavu integrovaného vývojového prostředí (IDE).

Zpožděné načítání

Typickým způsobem, jak povolit zpožděné načítání, je navrhnout balíček VSPackage tak, aby se jeho příkazy zobrazovaly v uživatelském rozhraní, ale samotný balíček se nenačte, dokud uživatel klikne na jeden z příkazů. Chcete-li toho dosáhnout, vytvořte v souboru .vsct příkazy, které nemají žádné příznaky příkazů.

Následující příklad ukazuje definici příkazu nabídky ze souboru .vsct. Jedná se o příkaz vygenerovaný šablonou balíčku sady Visual Studio při výběru možnosti Příkaz nabídky v šabloně.

<Button guid="guidTopLevelMenuCmdSet" id="cmdidTestCommand" priority="0x0100" type="Button">
  <Parent guid="guidTopLevelMenuCmdSet" id="MyMenuGroup" />
  <Icon guid="guidImages" id="bmpPic1" />
  <Strings>
    <CommandName>cmdidTestCommand</CommandName>
    <ButtonText>Test Command</ButtonText>
  </Strings>
</Button>

Pokud je v příkladu nadřazená skupina podřízeným položkou nabídky nejvyšší úrovně, jako je například nabídka Nástroje, příkaz se zobrazí v této nabídce, ale balíček, který příkaz spustí, se nenačte, MyMenuGroupdokud uživatel nekliká na příkaz. Když ale naprogramujete příkaz pro implementaci IOleCommandTarget rozhraní, můžete povolit načtení balíčku při prvním rozbalení nabídky obsahující příkaz.

Všimněte si, že zpožděné načítání může také zlepšit výkon při spuštění.

Aktuální kontext a viditelnost příkazů

Příkazy VSPackage můžete naprogramovat tak, aby byly viditelné nebo skryté, v závislosti na aktuálním stavu dat balíčku VSPackage nebo akcích, které jsou aktuálně relevantní. Můžete povolit VSPackage nastavit stav jeho příkazů, obvykle pomocí implementace QueryStatus metody z IOleCommandTarget rozhraní, ale to vyžaduje, aby byl balíček VSPackage načten před spuštěním kódu. Místo toho doporučujeme povolit integrované vývojové prostředí (IDE) spravovat viditelnost příkazů bez načtení balíčku. Uděláte to tak, že v souboru .vsct přidružíte příkazy k jednomu nebo více speciálním kontextům uživatelského rozhraní. Tyto kontexty uživatelského rozhraní jsou identifikovány identifikátorem GUID označovaným jako guid kontextu příkazu.

Visual Studio monitoruje změny, které vyplývají z uživatelských akcí, jako je načtení projektu nebo přechod z úprav na sestavení. Když dojde ke změnám, vzhled integrovaného vývojového prostředí (IDE) se automaticky upraví. V následující tabulce jsou uvedeny čtyři hlavní kontexty změny integrovaného vývojového prostředí( IDE), které Visual Studio monitoruje.

Typ kontextu Popis
Typ aktivního projektu U většiny typů projektů je tato GUID hodnota stejná jako identifikátor GUID balíčku VSPackage, který implementuje projekt. Projekty Visual C++ však jako hodnotu používají typ GUID projektu.
Aktivní okno Obvykle se jedná o poslední aktivní okno dokumentu, které vytváří aktuální kontext uživatelského rozhraní pro klíčové vazby. Může to ale být také okno nástroje s tabulkou klíčových vazeb, která se podobá internímu webovému prohlížeči. U oken dokumentů s více kartami, jako je editor HTML, má každá karta jiný kontext GUIDpříkazu .
Active Language Service Služba jazyka přidružená k souboru, který je aktuálně zobrazen v textovém editoru.
Aktivní okno nástroje Okno nástroje, které je otevřené a má fokus.

Pátou hlavní kontextovou oblastí je stav uživatelského rozhraní integrovaného vývojového prostředí (IDE). Kontexty uživatelského rozhraní jsou identifikovány aktivními kontexty GUIDpříkazů následujícím způsobem:

Tyto identifikátory GUID jsou v závislosti na aktuálním stavu integrovaného vývojového prostředí označené jako aktivní nebo neaktivní. Současně může být aktivní více kontextů uživatelského rozhraní.

Skrytí a zobrazení příkazů na základě kontextu

V integrovaném vývojovém prostředí (IDE) můžete zobrazit nebo skrýt příkaz balíčku bez načtení samotného balíčku. Chcete-li to provést, definujte příkaz v souboru .vsct balíčku pomocí DefaultDisabled, DefaultInvisiblea příkaz příznaky a DynamicVisibility přidání jednoho nebo více elementů VisibilityItem do oddílu VisibilityConstraints . Když se zadaný kontext GUID příkazu aktivuje, zobrazí se příkaz bez načtení balíčku.

Identifikátory GUID vlastního kontextu

Pokud ještě není definovaný odpovídající identifikátor GUID kontextu příkazu, můžete ho definovat v balíčku VSPackage a pak ho naprogramovat tak, aby byl aktivní nebo neaktivní, aby mohl řídit viditelnost příkazů. SVsShellMonitorSelection Použijte službu k:

  • Zaregistrujte identifikátory GUID kontextu (voláním GetCmdUIContextCookie metody).

  • Získání stavu kontextu GUID (voláním IsCmdUIContextActive metody)

  • Zapněte a vypněte kontext GUID(voláním SetCmdUIContext metody).

    Upozornění

    Ujistěte se, že váš balíček VSPackage nemá vliv na stav žádného existujícího identifikátoru GUID kontextu, protože na nich můžou záviset další balíčky VSPackage.

Příklad

Následující příklad příkazu VSPackage ukazuje dynamickou viditelnost příkazu spravovaného kontexty příkazů bez načtení balíčku VSPackage.

Příkaz je nastavený tak, aby byl povolen a zobrazen vždy, když existuje řešení; to znamená, že pokud je aktivní některý z následujících identifikátorů GUID kontextu příkazu:

V příkladu si všimněte, že každý příznak příkazu je samostatný element Command Flag .

<Button guid="guidDynamicVisibilityCmdSet" id="cmdidMyCommand"
        priority="0x0100" type="Button">
  <Parent guid="guidDynamicVisibilityCmdSet" id="MyMenuGroup" />
  <Icon guid="guidImages" id="bmpPic1" />
  <CommandFlag>DefaultDisabled</CommandFlag>
  <CommandFlag>DefaultInvisible</CommandFlag>
  <CommandFlag>DynamicVisibility</CommandFlag>
  <Strings>
    <CommandName>cmdidMyCommand</CommandName>
    <ButtonText>My Command name</ButtonText>
  </Strings>
</Button>

Všimněte si také, že každý kontext uživatelského rozhraní musí být uveden v samostatném VisibilityItem prvku následujícím způsobem.

<VisibilityConstraints>
  <VisibilityItem guid="guidDynamicVisibilityCmdSet"
                  id="cmdidMyCommand" context="UICONTEXT_EmptySolution" />
  <VisibilityItem guid="guidDynamicVisibilityCmdSet"
                      id="cmdidMyCommand" context="UICONTEXT_SolutionHasSingleProject" />
  <VisibilityItem guid="guidDynamicVisibilityCmdSet"
                  id="cmdidMyCommand" context="UICONTEXT_SolutionHasMultipleProjects" />
</VisibilityConstraints>