Membuat perintah tersedia
Ketika beberapa VSPackages ditambahkan ke Visual Studio, antarmuka pengguna (UI) mungkin menjadi sesak dengan perintah. Anda dapat memprogram paket Anda untuk membantu mengurangi masalah ini, sebagai berikut:
Program paket sehingga dimuat hanya ketika pengguna memerlukannya.
Programkan paket sehingga perintahnya hanya ditampilkan ketika mungkin diperlukan dalam konteks status lingkungan pengembangan terintegrasi (IDE) saat ini.
Pemuatan tertunda
Cara umum untuk mengaktifkan pemuatan tertunda adalah dengan merancang VSPackage sehingga perintahnya ditampilkan di UI, tetapi paket itu sendiri tidak dimuat sampai pengguna mengklik salah satu perintah. Untuk mencapai hal ini, dalam file .vsct, buat perintah yang tidak memiliki bendera perintah.
Contoh berikut menunjukkan definisi perintah menu dari file .vsct. Ini adalah perintah yang dihasilkan oleh Templat Paket Visual Studio saat opsi Perintah Menu dalam templat dipilih.
<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>
Dalam contoh, jika grup induk, MyMenuGroup
, adalah anak dari menu tingkat atas seperti menu Alat , perintah akan terlihat pada menu tersebut, tetapi paket yang menjalankan perintah tidak akan dimuat hingga perintah diklik oleh pengguna. Namun, dengan memprogram perintah untuk mengimplementasikan IOleCommandTarget antarmuka, Anda dapat mengaktifkan paket untuk dimuat ketika menu yang berisi perintah pertama kali diperluas.
Perhatikan bahwa pemuatan yang tertunda juga dapat meningkatkan performa start-up.
Konteks saat ini dan visibilitas perintah
Anda dapat memprogram perintah VSPackage agar terlihat atau tersembunyi, tergantung pada status data VSPackage saat ini atau tindakan yang saat ini relevan. Anda dapat mengaktifkan VSPackage untuk mengatur status perintahnya, biasanya dengan menggunakan implementasi QueryStatus metode dari IOleCommandTarget antarmuka, tetapi ini mengharuskan VSPackage dimuat sebelum dapat menjalankan kode. Sebagai gantinya, kami sarankan Anda mengaktifkan IDE untuk mengelola visibilitas perintah tanpa memuat paket. Untuk melakukan ini, dalam file .vsct, kaitkan perintah dengan satu atau beberapa konteks UI khusus. Konteks UI ini diidentifikasi oleh GUID yang dikenal sebagai GUID konteks perintah.
Visual Studio memantau perubahan yang dihasilkan dari tindakan pengguna seperti memuat proyek atau beralih dari pengeditan ke bangunan. Saat perubahan terjadi, tampilan IDE secara otomatis dimodifikasi. Tabel berikut ini memperlihatkan empat konteks utama perubahan IDE yang dipantau Visual Studio.
Jenis Konteks | Deskripsi |
---|---|
Jenis Proyek Aktif | Untuk sebagian besar jenis proyek, nilai ini GUID sama dengan GUID VSPackage yang mengimplementasikan proyek. Namun, proyek Visual C++ menggunakan Jenis GUID Proyek sebagai nilai. |
Jendela Aktif | Biasanya, ini adalah jendela dokumen aktif terakhir yang menetapkan konteks UI saat ini untuk pengikatan kunci. Namun, itu juga bisa menjadi jendela alat yang memiliki tabel pengikatan kunci yang menyerupan browser Web internal. Untuk jendela dokumen multi-tab seperti editor HTML, setiap tab memiliki konteks GUID perintah yang berbeda . |
Layanan Bahasa Aktif | Layanan bahasa yang terkait dengan file yang saat ini ditampilkan di editor teks. |
Jendela Alat Aktif | Jendela alat yang terbuka dan memiliki fokus. |
Area konteks utama kelima adalah status UI IDE. Konteks UI diidentifikasi oleh konteks GUID
perintah aktif, sebagai berikut:
GUID ini ditandai sebagai aktif atau tidak aktif, tergantung pada status IDE saat ini. Beberapa konteks UI dapat aktif secara bersamaan.
Sembunyikan dan tampilkan perintah berdasarkan konteks
Anda dapat menampilkan atau menyembunyikan perintah paket di IDE tanpa memuat paket itu sendiri. Untuk melakukan ini, tentukan perintah dalam file .vsct paket dengan menggunakan DefaultDisabled
bendera perintah , , DefaultInvisible
dan DynamicVisibility
dan menambahkan satu atau beberapa elemen VisibilityItem ke bagian VisibilityConstraints . Ketika konteks GUID
perintah yang ditentukan menjadi aktif, perintah ditampilkan tanpa memuat paket.
GUID konteks kustom
Jika GUID konteks perintah yang sesuai belum ditentukan, Anda dapat menentukannya di VSPackage Anda lalu memprogramnya agar aktif atau tidak aktif sesuai kebutuhan untuk mengontrol visibilitas perintah Anda. SVsShellMonitorSelection Gunakan layanan untuk:
Daftarkan GUID konteks (dengan memanggil GetCmdUIContextCookie metode ).
Dapatkan status konteks
GUID
(dengan memanggil IsCmdUIContextActive metode ).Aktifkan dan nonaktifkan konteks
GUID
(dengan memanggil SetCmdUIContext metode ).Perhatian
Pastikan VSPackage Anda tidak memengaruhi status GUID konteks yang ada karena VSPackage lainnya mungkin bergantung padanya.
Contoh
Contoh perintah VSPackage berikut menunjukkan visibilitas dinamis perintah yang dikelola oleh konteks perintah tanpa memuat VSPackage.
Perintah diatur untuk diaktifkan dan ditampilkan setiap kali solusi ada; artinya, setiap kali salah satu GUID konteks perintah berikut aktif:
Dalam contoh, perhatikan bahwa setiap bendera perintah adalah elemen Bendera Perintah terpisah.
<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>
Perhatikan juga bahwa setiap konteks UI harus diberikan dalam elemen terpisah VisibilityItem
, sebagai berikut.
<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>