Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Visual Studio'ya birden çok VSPackage eklendiğinde, kullanıcı arabirimi (UI) komutlarla aşırı kalabalık hale gelebilir. Paketinizi aşağıdaki gibi bu sorunu azaltmaya yardımcı olacak şekilde programlayabilirsiniz:
Paketi yalnızca bir kullanıcı gerektirdiğinde yüklendiği şekilde programlayın.
Paketi, komutlarının yalnızca tümleşik geliştirme ortamının (IDE) geçerli durumu bağlamında gerekli olabilecek durumlarda görüntülenmesi için programlayın.
Gecikmeli yükleme
Gecikmeli yüklemeyi etkinleştirmenin tipik yolu VSPackage'ı komutlarının kullanıcı arabiriminde görüntüleneceği şekilde tasarlamaktır, ancak kullanıcı komutlardan birine tıklayana kadar paketin kendisi yüklenmez. Bunu yapmak için .vsct dosyasında komut bayrağı olmayan komutlar oluşturun.
Aşağıdaki örnekte bir .vsct dosyasından menü komutunun tanımı gösterilmektedir. Bu, şablondaki Menü Komutu seçeneği seçildiğinde Visual Studio Paket Şablonu tarafından oluşturulan komuttur.
<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>
Örnekte, üst grup , MyMenuGroupAraçlar menüsü gibi üst düzey bir menünün alt öğesiyse, komut bu menüde görünür, ancak komutu yürüten paket, komut bir kullanıcı tarafından tıklanana kadar yüklenmez. Ancak, IOleCommandTarget arabirimini uygulayacak şekilde komutu programlayarak, komutun bulunduğu menü ilk kez genişletildiğinde paketin yüklenmesini etkinleştirebilirsiniz.
Gecikmeli yüklemenin başlatma performansını da iyileştirebileceğine dikkat edin.
Geçerli bağlam ve komutların görünürlüğü
VSPackage verilerinin geçerli durumuna veya geçerli durumda ilgili eylemlere bağlı olarak, VSPackage komutlarını görünür veya gizli olacak şekilde programlayabilirsiniz. VSPackage'ın komutlarının durumunu ayarlamasını sağlamak için genellikle arabiriminden QueryStatus yönteminin IOleCommandTarget bir uygulamasını kullanabilirsiniz, ancak bunun için kodu yürütmeden önce VSPackage'ın yüklenmesi gerekir. Bunun yerine, paketi yüklemeden komutların görünürlüğünü yönetmek için IDE'yi etkinleştirmenizi öneririz. Bunu yapmak için,.vsct dosyasında komutları bir veya daha fazla özel kullanıcı arabirimi bağlamıyla ilişkilendirin. Bu kullanıcı arabirimi bağlamları , komut bağlamı GUID'i olarak bilinen bir GUID ile tanımlanır.
Visual Studio, proje yükleme veya düzenlemeden derlemeye gitme gibi kullanıcı eylemlerinden kaynaklanan değişiklikleri izler. Değişiklikler olduğunda, IDE'nin görünümü otomatik olarak değiştirilir. Aşağıdaki tabloda, Visual Studio'nun izlediği IDE değişikliğinin dört ana bağlamı gösterilmektedir.
| Bağlam Türü | Açıklama |
|---|---|
| Etkin Proje Türü | Çoğu proje türü için bu GUID değer, projeyi uygulayan VSPackage'ın GUID değeriyle aynıdır. Ancak, Visual C++ projeleri değer olarak Proje Türü'nü GUID kullanır. |
| Etkin Pencere | Genellikle bu, anahtar bağlamaları için geçerli kullanıcı arabirimi bağlamını oluşturan son etkin belge penceresidir. Ancak, iç Web tarayıcısına benzeyen bir anahtar bağlama tablosuna sahip bir araç penceresi de olabilir. HTML düzenleyicisi gibi çok sekmeli belge pencereleri için her sekmenin farklı bir komut bağlamı GUIDvardır. |
| Etkin Dil Hizmeti | Şu anda bir metin düzenleyicisinde görüntülenen dosyayla ilişkilendirilmiş dil hizmeti. |
| Etkin Araç Penceresi | Odakta ve açık olan bir araç penceresi. |
Beşinci ana bağlam alanı, IDE'nin kullanıcı arabirimi durumudur. Kullanıcı arabirimi bağlamları etkin komut bağlamları GUIDtarafından aşağıdaki gibi tanımlanır:
Bu GUID'ler, IDE'nin geçerli durumuna bağlı olarak etkin veya etkin değil olarak işaretlenir. Birden çok kullanıcı arabirimi bağlamı aynı anda etkin olabilir.
Bağlama göre komutları gizleme ve görüntüleme
Paketin kendisini yüklemeden IDE'de paket komutunu görüntüleyebilir veya gizleyebilirsiniz. Bunu yapmak için, DefaultDisabled, DefaultInvisible ve DynamicVisibility komut bayraklarını kullanarak ve VisibilityConstraints bölümüne bir veya daha fazla VisibilityItem öğesi ekleyerek paketin .vsct dosyasındaki komutu tanımlayın. Belirtilen bir komut bağlamı GUID etkin hale geldiğinde, paket yüklenmeden komut görüntülenir.
Özel bağlam GUID'leri
Uygun bir komut bağlamı GUID'i henüz tanımlanmamışsa, VSPackage'ınızda bir guid tanımlayabilir ve ardından komutlarınızın görünürlüğünü denetlemek için gerektiğinde bunu etkin veya etkin olmayacak şekilde programlayabilirsiniz. SVsShellMonitorSelection hizmetini kullanarak:
Bağlam GUID'lerini kaydedin (metodu GetCmdUIContextCookie çağırarak).
Bağlamın
GUIDdurumunu alın (yöntemini çağırarak IsCmdUIContextActive ).Kapsamı
GUIDaçma-kapama işlemlerini gerçekleştirin (SetCmdUIContext yöntemini çağırarak).Dikkat
Diğer VSPackage'lar bunlara bağlı olabileceğinden VSPackage'ınızın mevcut bağlam GUID'sinin durumunu etkilemediğinden emin olun.
Örnek
Aşağıdaki VSPackage komutu örneği, VSPackage'ı yüklemeden komut bağlamları tarafından yönetilen bir komutun dinamik görünürlüğünü gösterir.
Komut, bir çözüm mevcut olduğunda etkinleştirilecek ve görüntülenecek şekilde ayarlanır; diğer bir ifadeyle, aşağıdaki komut bağlamı GUID'lerinden biri etkin olduğunda:
Örnekte, her komut bayrağının ayrı bir Komut Bayrağı öğesi olduğuna dikkat edin.
<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>
Ayrıca her bir kullanıcı arabirimi bağlamı, aşağıda belirtildiği gibi, ayrı bir VisibilityItem öğesinde verilmelidir.
<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>