Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Menggunakan warna di Visual Studio
Di Visual Studio, warna digunakan terutama sebagai alat komunikasi, bukan hanya sebagai dekorasi. Gunakan warna minimal dan simpan untuk situasi di mana Anda ingin:
Mengkomunikasikan arti atau afiliasi (misalnya, pengubah platform atau bahasa)
Menarik perhatian (misalnya, menunjukkan perubahan status)
Meningkatkan keterbacaan dan menyediakan landmark untuk menavigasi UI
Meningkatkan desirability
Beberapa opsi ada untuk menetapkan warna ke elemen UI di Visual Studio. Terkadang mungkin sulit untuk mencari tahu opsi mana yang harus Anda gunakan, atau cara menggunakannya dengan benar. Topik ini akan membantu Anda:
Pahami berbagai layanan dan sistem yang digunakan untuk menentukan warna di Visual Studio.
Pilih opsi yang benar untuk elemen tertentu.
Gunakan opsi yang telah Anda pilih dengan benar.
Catatan
Jangan pernah hardcode hex, RGB, atau warna sistem ke elemen UI Anda. Menggunakan layanan memungkinkan fleksibilitas dalam penyetelan rona. Selain itu, tanpa layanan, Anda tidak akan dapat memanfaatkan kemampuan peralihan tema layanan VSColor.
Metode untuk menetapkan warna ke elemen antarmuka Visual Studio
Pilih metode yang paling cocok untuk elemen UI Anda.
UI Anda | Metode | Apa saja? |
---|---|---|
Anda telah menyematkan kotak dialog atau mandiri. | Warna sistem | Nama sistem yang memungkinkan sistem operasi menentukan warna dan tampilan elemen UI, seperti kontrol dialog umum. |
Anda memiliki UI kustom yang ingin Konsisten dengan lingkungan VS secara keseluruhan dan Anda memiliki elemen UI yang cocok dengan kategori dan arti semantik dari token bersama. | Warna bersama umum | Nama token warna yang telah ditentukan sebelumnya untuk elemen UI tertentu |
Anda memiliki fitur individual atau sekelompok fitur dan tidak ada warna bersama untuk elemen serupa. | Warna kustom | Nama token warna yang khusus untuk area dan tidak dimaksudkan untuk dibagikan dengan UI lain |
Anda ingin mengizinkan pengguna akhir untuk menyesuaikan UI atau konten (misalnya, untuk editor teks atau jendela desainer khusus). | Kustomisasi pengguna akhir (Alat > Dialog Opsi) |
Pengaturan didefinisikan di halaman "Font dan Warna" dari Dialog Opsi Alat > atau halaman khusus khusus untuk satu fitur UI. |
Tema Visual Studio
Visual Studio menampilkan tiga tema warna yang berbeda: terang, gelap, dan biru. Ini juga mendeteksi mode Kontras Tinggi, yang merupakan tema warna seluruh sistem yang dirancang untuk aksesibilitas.
Pengguna diminta untuk memilih tema selama penggunaan pertama Visual Studio dan dapat beralih tema nanti dengan masuk ke Alat > Opsi > Lingkungan > Umum dan memilih tema baru dari menu drop-down "tema warna".
Pengguna juga dapat menggunakan Panel Kontrol untuk mengalihkan seluruh sistem mereka menjadi salah satu dari beberapa tema Kontras Tinggi. Jika pengguna memilih tema Kontras Tinggi, pemilih tema warna Visual Studio tidak lagi memengaruhi warna di Visual Studio, meskipun perubahan tema apa pun disimpan saat pengguna keluar dari mode Kontras Tinggi. Untuk informasi selengkapnya tentang mode Kontras Tinggi, lihat Memilih warna Kontras Tinggi.
Layanan VSColor
Visual Studio menyediakan layanan warna lingkungan, yang dikenal sebagai layanan VSColor, yang memungkinkan Anda untuk mengikat nilai warna elemen UI Anda ke entri bernama yang berisi nilai warna untuk setiap tema Visual Studio. Ini memastikan bahwa warna Anda akan berubah secara otomatis untuk mencerminkan tema yang dipilih pengguna saat ini atau mode Kontras Tinggi sistem. Penggunaan layanan berarti bahwa implementasi semua perubahan warna terkait tema ditangani di satu tempat, dan jika Anda menggunakan warna bersama umum dari layanan, UI Anda akan secara otomatis mencerminkan tema baru di versi Visual Studio yang akan datang.
implementasi
Kode sumber Visual Studio menyertakan beberapa file definisi paket yang berisi daftar nama token dan nilai warna masing-masing untuk setiap tema. Layanan warna membaca VSColors yang ditentukan dalam file definisi paket ini. Warna-warna ini direferensikan dalam markup XAML atau dalam kode dan kemudian dimuat melalui IVsUIShell5.GetThemedColor
metode atau pemetaan DynamicResource.
Warna sistem
Kontrol umum mereferensikan warna sistem secara default. Jika Anda ingin antarmuka pengguna Anda menggunakan warna sistem, seperti saat Anda membuat dialog tersemat atau mandiri, Anda tidak perlu melakukan apa pun.
Warna bersama umum dalam layanan VSColor
Elemen antarmuka Anda harus mencerminkan lingkungan Visual Studio secara keseluruhan. Dengan menggunakan kembali warna bersama umum yang sesuai untuk komponen UI yang Anda desain, Anda memastikan bahwa antarmuka Anda konsisten dengan antarmuka Visual Studio lainnya, dan warna Anda akan diperbarui secara otomatis saat tema ditambahkan atau diperbarui.
Sebelum menggunakan warna bersama umum, pastikan Anda memahami cara menggunakannya dengan benar. Penggunaan warna bersama yang salah dapat mengakibatkan pengalaman yang tidak konsisten, membuat frustrasi, atau membingungkan bagi pengguna Anda.
Warna yang dapat disesuaikan pengguna
Lihat: Mengekspos warna untuk pengguna akhir
Terkadang, Anda ingin mengizinkan pengguna akhir untuk menyesuaikan UI Anda, seperti saat Anda membuat editor kode atau permukaan desain. Komponen UI yang dapat disesuaikan ditemukan di bagian Font dan Warna dari dialog Opsi Alat>, di mana pengguna dapat memilih untuk mengubah warna latar depan, warna latar belakang, atau keduanya.
Dialog Opsi Alat >
Layanan VSColor
Visual Studio menyediakan layanan warna lingkungan, juga disebut layanan VSColor atau layanan warna shell. Layanan ini memungkinkan Anda untuk mengikat nilai warna elemen UI Anda ke kumpulan warna nilai nama yang berisi warna untuk setiap tema. Layanan VSColor harus digunakan untuk semua elemen UI, sehingga warna secara otomatis berubah untuk mencerminkan tema yang dipilih pengguna saat ini, dan sehingga UI yang terikat ke layanan warna lingkungan akan berintegrasi dengan tema baru di versi Visual Studio yang akan datang.
Cara kerja layanan
Layanan warna lingkungan membaca VSColors yang ditentukan dalam .pkgdef untuk komponen UI. VSColors ini kemudian direferensikan dalam markup atau kode XAML dan dimuat melalui IVsUIShell5.GetThemedColor
pemetaan atau DynamicResource
.
Arsitektur layanan warna lingkungan
Mengakses layanan
Ada beberapa cara berbeda untuk mengakses layanan VSColor, tergantung pada jenis token warna apa yang Anda gunakan dan jenis kode apa yang Anda miliki.
Warna lingkungan yang telah ditentukan sebelumnya
Dari kode asli
Shell menyediakan layanan yang memberikan akses ke COLORREF
warna. Layanan/antarmukanya adalah:
IVsUIShell2::GetVSSysColorEx(VSSYSCOLOR dwSysColIndex, DWORD *pdwRGBval)
Dalam file VSShell80.idl, enumerasi __VSSYSCOLOREX
memiliki konstanta warna shell. Untuk menggunakannya, teruskan sebagai nilai indeks salah satu nilai dari enum __VSSYSCOLOREX
yang didokumentasikan dalam MSDN atau nomor indeks reguler yang diterima OLEH API GetSysColor
sistem Windows. Melakukan ini mendapatkan kembali nilai RGB warna yang harus digunakan dalam parameter kedua.
Jika menyimpan pena atau sikat dengan warna baru, Anda harus AdviseBroadcastMessages
(keluar dari shell Visual Studio) dan mendengarkan WM_SYSCOLORCHANGE
pesan dan WM_THEMECHANGED
.
Untuk mengakses layanan warna dalam kode asli, Anda akan melakukan panggilan yang menyerupai ini:
pUIShell2->GetVSSysColorEx(VSCOLOR_COLOR_NAME, &rgbLOCAL_COLOR);
Catatan
Nilai COLORREF
yang dikembalikan hanya GetVSSysColorEx()
berisi komponen R,G,B dari warna tema. Jika entri tema menggunakan transparansi, nilai alfa-channel akan dibuang sebelum dikembalikan. Oleh karena itu, jika warna lingkungan yang menarik perlu digunakan di tempat di mana saluran transparansi penting, Anda harus menggunakan IVsUIShell5.GetThemedColor
alih-alih IVsUIShell2::GetVSSysColorEx
, seperti yang dijelaskan nanti dalam topik ini.
Dari kode terkelola
Mengakses layanan VSColor melalui kode asli cukup mudah. Namun, jika Anda bekerja melalui kode terkelola, menentukan cara menggunakan layanan dapat menjadi sulit. Dengan mengingat hal itu, berikut adalah cuplikan kode C# yang menunjukkan proses ini:
private void VSColorPaint(object sender, System.Windows.Forms.PaintEventArgs e)
{
//getIVSUIShell2
IVsUIShell2 uiShell2 = Package.GetService(typeof(SVsUIShell)) as IVsUIShell2;
Debug.Assert (uiShell2 != null, "failed to get IVsUIShell2");
if (uiShell2 != null)
{
//get the COLORREF structure
uint win32Color;
uiShell2.GetVSSysColorEx((int)__VSSYSCOLOREX.VSCOLOR_SMARTTAG_HOVER_FILL, out win32Color);
//translate it to a managed Color structure
Color myColor = ColorTranslator.FromWin32((int)win32Color);
//use it
e.Graphics.FillRectangle(new SolidBrush(myColor), 0, 0, 100, 100);
}
}
Jika Anda bekerja di Visual Basic, gunakan:
Dim myColor As Color = ColorTranslator.FromWin32((Integer)win32Color)
Dari WPF UI
Anda dapat mengikat warna Visual Studio melalui nilai yang diekspor ke dalam Aplikasi ResourceDictionary
. Di bawah ini adalah contoh penggunaan sumber daya dari tabel warna serta pengikatan ke data font lingkungan di XAML.
<Style TargetType="{x:Type Button}">
<Setter Property="TextBlock.FontFamily"
Value="{DynamicResource VsFont.EnvironmentFontFamily}" />
<Setter Property="TextBlock.FontSize"
Value="{DynamicResource VsFont.EnvironmentFontSize}" />
<Setter Property="Background"
Value="{DynamicResource VsBrush.EnvironmentBackgroundGradient}" />
</Style>
Kelas dan metode pembantu untuk kode terkelola
Untuk kode terkelola, pustaka Kerangka Kerja Paket Terkelola shell (Microsoft.VisualStudio.Shell.12.0.dll
) berisi beberapa kelas pembantu yang memfasilitasi penggunaan warna ber tema.
Metode pembantu Microsoft.VisualStudio.Shell.VsColors
di kelas di MPF meliputi GetThemedGDIColor()
dan GetThemedWPFColor()
. Metode pembantu tersebut mengembalikan nilai warna entri tema sebagai System.Drawing.Color
atau System.Windows.Media.Color
, untuk digunakan dalam WinForms atau WPF UI.
IVsUIShell5 shell5;
Button button = new Button();
button.BackColor = GetThemedGDIColor(shell5, SolutionExplorerColors.SelectedItemBrushKey);
button.ForeColor = GetThemedGDIColor(shell5, SolutionExplorerColors.SelectedItemTextBrushKey);
/// <summary>
/// Gets a System.Drawing.Color value from the current theme for the given color key.
/// </summary>
/// <param name="vsUIShell">The IVsUIShell5 service, used to get the color's value.</param>
/// <param name="themeResourceKey">The key to find the color for.</param>
/// <returns>The current theme's value of the named color.</returns>
public static System.Drawing.Color GetThemedGDIColor(this IVsUIShell5 vsUIShell, ThemeResourceKey themeResourceKey)
{
Validate.IsNotNull(vsUIShell, "vsUIShell");
Validate.IsNotNull(themeResourceKey, "themeResourceKey");
byte[] colorComponents = GetThemedColorRgba(vsUIShell, themeResourceKey);
// Note: The Win32 color we get back from IVsUIShell5.GetThemedColor is ABGR
return System.Drawing.Color.FromArgb(colorComponents[3], colorComponents[0], colorComponents[1], colorComponents[2]);
}
private static byte[] GetThemedColorRgba(IVsUIShell5 vsUIShell, ThemeResourceKey themeResourceKey)
{
Guid category = themeResourceKey.Category;
__THEMEDCOLORTYPE colorType = __THEMEDCOLORTYPE.TCT_Foreground
if (themeResourceKey.KeyType == ThemeResourceKeyType.BackgroundColor || themeResourceKey.KeyType == ThemeResourceKeyType.BackgroundBrush)
{
colorType = __THEMEDCOLORTYPE.TCT_Background;
}
// This call will throw an exception if the color is not found
uint rgbaColor = vsUIShell.GetThemedColor(ref category, themeResourceKey.Name, (uint)colorType);
return BitConverter.GetBytes(rgbaColor);
}
public static System.Windows.Media.Color GetThemedWPFColor(this IVsUIShell5 vsUIShell, ThemeResourceKey themeResourceKey)
{
Validate.IsNotNull(vsUIShell, "vsUIShell");
Validate.IsNotNull(themeResourceKey, "themeResourceKey");
byte[] colorComponents = GetThemedColorComponents(vsUIShell, themeResourceKey);
return System.Windows.Media.Color.FromArgb(colorComponents[3], colorComponents[0], colorComponents[1], colorComponents[2]);
}
Kelas ini juga dapat digunakan untuk mendapatkan pengidentifikasi VSCOLOR untuk kunci sumber daya warna WPF tertentu, atau sebaliknya.
public static string GetColorBaseKey(int vsSysColor);
public static bool TryGetColorIDFromBaseKey(string baseKey, out int vsSysColor);
Metode VsColors
kueri kelas layanan VSColor untuk mengembalikan nilai warna setiap kali dipanggil. Untuk mendapatkan nilai warna sebagai System.Drawing.Color
, alternatif dengan performa yang lebih baik adalah menggunakan metode Microsoft.VisualStudio.PlatformUI.VSColorTheme
kelas , yang menyimpan nilai warna yang diperoleh dari layanan VSColor. Kelas berlangganan peristiwa pesan siaran shell secara internal, dan membuang nilai yang di-cache saat peristiwa perubahan tema terjadi. Selain itu, kelas menyediakan . Acara yang ramah NET untuk berlangganan perubahan tema. ThemeChanged
Gunakan peristiwa untuk menambahkan handler baru, dan gunakan GetThemedColor()
metode untuk mendapatkan nilai warna yang ThemeResourceKeys
menarik. Kode sampel bisa terlihat seperti ini:
public MyWindowPanel()
{
InitializeComponent();
// Subscribe to theme changes events so we can refresh the colors
VSColorTheme.ThemeChanged += VSColorTheme_ThemeChanged;
RefreshColors();
}
private void VSColorTheme_ThemeChanged(ThemeChangedEventArgs e)
{
RefreshColors();
// Also post a message to all the children so they can apply the current theme appropriately
foreach (System.Windows.Forms.Control child in this.Controls)
{
NativeMethods.SendMessage(child.Handle, e.Message, IntPtr.Zero, IntPtr.Zero);
}
}
private void RefreshColors()
{
this.BackColor = VSColorTheme.GetThemedColor(EnvironmentColors.ToolWindowBackgroundColorKey);
this.ForeColor = VSColorTheme.GetThemedColor(EnvironmentColors.ToolWindowTextColorKey);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
VSColorTheme.ThemeChanged -= this.VSColorTheme_ThemeChanged;
base.Dispose(disposing);}
}
Memilih warna Kontras Tinggi
Windows menggunakan beberapa tema tingkat sistem kontras tinggi yang meningkatkan kontras warna teks, latar belakang, dan gambar, membuat elemen tampak lebih berbeda di layar. Untuk alasan aksesibilitas, penting bahwa elemen antarmuka Visual Studio merespons dengan benar saat pengguna beralih ke tema Kontras Tinggi.
Hanya beberapa warna sistem yang dapat digunakan untuk tema Kontras Tinggi. Saat memilih nama warna sistem Anda, ingat tips berikut:
Pilih warna sistem yang memiliki arti semantik yang sama dengan elemen yang Anda warnai. Misalnya, jika Anda memilih warna kontras tinggi untuk teks dalam jendela, gunakan WindowText dan bukan ControlText.
Pilih pasangan latar depan/latar belakang bersama-sama atau Anda tidak akan yakin bahwa pilihan warna Anda akan berfungsi di semua tema Kontras Tinggi.
Tentukan bagian mana dari UI Anda yang paling penting dan pastikan bahwa area konten akan menonjol. Anda akan kehilangan banyak detail bahwa perbedaan halus dalam warna warna biasanya akan membedakan, sehingga penggunaan warna batas yang kuat umum untuk menentukan area konten, karena tidak ada varian warna untuk area konten yang berbeda.
Set warna sistem
Tabel di Blog Tim WPF: Referensi SystemColors menunjukkan kumpulan lengkap nama warna sistem, dan warna yang sesuai ditampilkan di setiap tema.
Saat menerapkan sekumpulan warna terbatas ini ke UI Anda, diharapkan Anda akan kehilangan detail halang yang ada dalam tema "normal". Berikut adalah contoh UI dengan warna abu-abu halus yang digunakan untuk membedakan area dalam jendela alat. Ketika dipasangkan dengan jendela yang sama ditampilkan dalam mode Kontras Tinggi, Anda dapat melihat bahwa semua latar belakang adalah warna yang sama dan batas area tersebut ditunjukkan oleh batas saja:
Contoh bagaimana detail halus hilang di Kontras Tinggi
Memilih warna teks di editor
Teks berwarna digunakan dalam editor atau pada permukaan desain untuk menunjukkan makna, seperti memungkinkan identifikasi grup yang mudah dari item serupa. Namun, dalam tema Kontras Tinggi, Anda tidak memiliki kemampuan untuk membedakan antara lebih dari tiga warna teks. WindowText, GrayText, dan HotTrackText adalah satu-satunya warna yang tersedia di permukaan WindowBackground. Karena Anda tidak dapat menggunakan lebih dari tiga warna, pilih dengan cermat perbedaan terpenting yang ingin Anda tampilkan saat dalam mode Kontras Tinggi.
Corak untuk setiap nama token yang diizinkan pada permukaan editor, karena muncul di setiap tema Kontras Tinggi:
Perbandingan editor Kontras Tinggi
Contoh permukaan editor dalam tema Biru:
Editor dalam tema Biru
Editor dalam tema #1 Kontras Tinggi
Pola penggunaan
Banyak elemen UI umum sudah memiliki warna Kontras Tinggi yang ditentukan. Anda dapat mereferensikan pola penggunaan ini saat memilih nama warna sistem Anda sendiri, sehingga elemen UI Anda konsisten dengan komponen serupa.
Warna Sistem | Penggunaan |
---|---|
ActiveCaption | - IDE Aktif dan tombol jendela rakit glyphs pada hover dan tekan - Latar belakang bilah judul untuk IDE dan jendela rakit - Latar belakang bilah status default |
ActiveCaptionText | - IDE Aktif dan jendela rakit untuk latar depan bilah judul (teks dan glyph) - Latar belakang dan batas tombol jendela aktif di hover dan tekan |
Menguasai | - Kotak kombo, daftar drop-down, dan kontrol pencarian default dan latar belakang yang dinonaktifkan, termasuk tombol drop-down - Latar belakang tombol target dok - Latar belakang bilah perintah - Latar belakang jendela alat |
ControlDark | - Latar belakang IDE - Pemisah menu dan bilah perintah - Batas bilah perintah - Bayangan menu - Tab jendela alat default dan arahkan kuartal batas dan pemisah - Latar belakang tombol luapan sumur dokumen - Batas glyph target dock |
ControlDarkDark | - Jendela tab dokumen yang tidak fokus dan dipilih |
ControlLight | - Sembunyikan batas tab secara otomatis - Kotak kombo dan batas daftar drop-down - Latar belakang dan batas target dok |
ControlLightLight | - Batas provisi yang dipilih dan difokuskan |
ControlText | - Kotak kombo dan glyph daftar drop-down - Jendela alat teks tab yang tidak dipilih |
GrayText | - Kotak kombo dan daftar drop-down dinonaktifkan batas, glyph drop-down, teks, dan teks item menu - Teks menu yang dinonaktifkan - Kontrol pencarian 'opsi pencarian' teks header - Pemisah bagian kontrol pencarian |
Sorotan | - Semua latar belakang dan batas yang diarahkan dan ditekan, kecuali latar belakang tombol drop-down kotak kombo dan batas tombol luapan sumur dokumen - Latar belakang item yang dipilih |
Teks Sorotan | - Semua melayang dan menekan latar depan (teks dan glisf) - Jendela alat yang difokuskan dan latar depan kontrol jendela tab dokumen - Batas bilah judul jendela alat yang difokuskan - Latar depan tab provisi yang difokuskan dan dipilih - Batas tombol luapan sumur dokumen di hover dan tekan - Batas ikon terpilih |
HotTrack | - Gulir latar belakang dan batas bilah gulir saat ditekan - Panah bilah gulir di tekan |
InactiveCaption | - IDE tidak aktif dan glyph tombol jendela rakit di hover - Latar belakang bilah judul untuk IDE dan jendela rakit - Latar belakang kontrol pencarian yang dinonaktifkan |
InactiveCaptionText | - IDE tidak aktif dan latar depan bilah judul jendela rakit (teks dan glyph) - Latar belakang tombol jendela tidak aktif dan batas di hover - Latar belakang dan batas tombol jendela alat yang tidak fokus - Latar depan kontrol pencarian yang dinonaktifkan |
Menu | - Latar belakang menu drop-down - Latar belakang tanda centang diperiksa dan dinonaktifkan |
Teks Menu | - Batas menu drop-down - Tanda centang - Glyph menu - Teks menu drop-down - Batas ikon terpilih |
Scrollbar | - Bilah gulir dan latar belakang panah bilah gulir, semua status |
Jendela | - Sembunyikan latar belakang tab secara otomatis - Bilah menu dan latar belakang rak perintah - Latar belakang tab jendela dokumen dan batas dokumen yang tidak fokus atau tidak dipilih, untuk tab terbuka dan provisi - Latar belakang bilah judul jendela alat tidak fokus - Latar belakang tab jendela alat, baik yang dipilih maupun tidak dipilih |
WindowFrame | - Batas IDE |
WindowText | - Latar depan tab sembunyikan otomatis - Latar depan tab jendela alat yang dipilih - Tab jendela dokumen yang tidak fokus dan latar depan tab provisi yang tidak fokus atau tidak dipilih - Tampilan pohon latar depan default dan arahkan mouse ke atas glyph yang tidak dipilih - Jendela alat yang dipilih batas tab - Gulir latar belakang jempol bilah, batas, dan glyph |
Mengekspos warna untuk pengguna akhir
Terkadang Anda ingin mengizinkan pengguna akhir untuk menyesuaikan UI Anda, seperti saat Anda membuat editor kode atau permukaan desain. Cara paling umum untuk melakukan ini adalah dengan menggunakan dialog Opsi Alat>. Kecuali Anda memiliki UI yang sangat khusus yang memerlukan kontrol khusus, cara termampu untuk menyajikan kustomisasi adalah melalui halaman Font dan Warna di dalam bagian Lingkungan dialog. Untuk setiap elemen yang Anda ekspos untuk kustomisasi, pengguna dapat memilih untuk mengubah warna latar depan, warna latar belakang, atau keduanya.
Membangun VSPackage untuk warna yang dapat disesuaikan
VSPackage dapat mengontrol font dan warna melalui kategori kustom dan menampilkan item pada halaman properti Font dan Warna. Saat menggunakan mekanisme ini, VSPackages harus menerapkan antarmuka IVsFontAndColorDefaultsProvider dan antarmuka terkait.
Pada prinsipnya, mekanisme ini dapat digunakan untuk memodifikasi semua item tampilan yang ada dan kategori yang berisinya. Namun, ini tidak boleh digunakan untuk mengubah kategori Editor Teks atau item tampilannya. Untuk informasi selengkapnya tentang kategori Editor Teks, lihat Gambaran Umum Font dan Warna.
Untuk menerapkan kategori kustom atau menampilkan Item, VSPackage harus:
Membuat atau mengidentifikasi kategori dalam registri. Implementasi IDE dari halaman properti Font dan Warna menggunakan informasi ini untuk mengkueri layanan dengan benar yang mendukung kategori tertentu.
Membuat atau mengidentifikasi grup dalam registri (opsional). Mungkin berguna untuk menentukan grup, yang mewakili persatuan dua kategori atau lebih. Jika grup ditentukan, IDE secara otomatis menggabungkan subkataan dan mendistribusikan item tampilan dalam grup.
Menerapkan dukungan IDE.
Menangani perubahan font dan warna.
Untuk membuat atau mengidentifikasi kategori
Buat jenis khusus entri registri kategori di mana [HKLM\SOFTWARE\Microsoft \Visual Studio\\<Visual Studio version\>\FontAndColors\\<Category\>]
<Category>
adalah nama kategori yang tidak dilokalkan.
Isi registri dengan dua nilai:
Nama | Jenis | Data | Deskripsi |
---|---|---|---|
Category | REG_SZ | GUID | GUID yang dibuat untuk mengidentifikasi kategori |
Paket | REG_SZ | GUID | GUID layanan VSPackage yang mendukung kategori |
Layanan yang ditentukan dalam registri harus menyediakan implementasi IVsFontAndColorDefaults untuk kategori yang sesuai.
Untuk membuat atau mengidentifikasi grup
Buat jenis khusus entri registri kategori di mana [HKLM\SOFTWARE\Microsoft \Visual Studio\\<Visual Studio version\>\FontAndColors\\<group\>]
<group>
adalah nama grup yang tidak dilokalkan.
Isi registri dengan dua nilai:
Nama | Jenis | Data | Deskripsi |
---|---|---|---|
Category | REG_SZ | GUID | GUID yang dibuat untuk mengidentifikasi kategori |
Paket | REG_SZ | GUID | GUID layanan VSPackage yang mendukung kategori |
Layanan yang ditentukan dalam registri harus menyediakan implementasi IVsFontAndColorGroup untuk grup yang sesuai.
Implementasi IVsFontAndColorGroup
Untuk mengimplementasikan dukungan IDE
Terapkan GetObject, yang mengembalikan antarmuka IVsFontAndColorDefaults atau IVsFontAndColorGroup antarmuka ke IDE untuk setiap kategori atau GUID grup yang disediakan.
Untuk setiap kategori yang didukungnya, VSPackage mengimplementasikan instans terpisah dari antarmuka IVsFontAndColorDefaults .
Metode yang diterapkan melalui IVsFontAndColorDefaults harus menyediakan IDE dengan:
Daftar item tampilan dalam kategori
Nama yang dapat dilokalkan untuk item tampilan
Menampilkan informasi untuk setiap anggota kategori
Catatan
Setiap kategori harus berisi setidaknya satu item tampilan.
IDE menggunakan antarmuka untuk menentukan persatuan IVsFontAndColorGroup beberapa kategori.
Implementasinya menyediakan IDE dengan:
Daftar kategori yang membentuk grup tertentu
Akses ke instans IVsFontAndColorDefaults yang mendukung setiap Kategori dalam grup
Nama grup yang dapat dilokalkan
Memperbarui IDE
IDE menyimpan informasi tentang pengaturan Font dan Warna. Oleh karena itu, setelah modifikasi konfigurasi Font dan Warna IDE, memastikan bahwa cache sudah diperbarui adalah praktik terbaik.
Memperbarui cache dilakukan melalui antarmuka IvsFontAndColorCacheManager dan dapat dilakukan secara global atau hanya pada item yang dipilih.
Menangani perubahan font dan warna
Untuk mendukung pewarnaan teks yang ditampilkan VSPackage dengan benar, layanan pewarnaan yang mendukung VSPackage harus merespons perubahan yang dimulai pengguna yang dibuat melalui halaman properti Font dan Warna.
Untuk melakukan ini, VSPackage harus:
menangani peristiwa yang dihasilkan IDE dengan mengimplementasikan antarmuka IVsFontAndColorEvents . IDE memanggil metode yang sesuai setelah modifikasi pengguna halaman Font dan Warna. Misalnya, ini memanggil metode OnFontChanged jika font baru dipilih.
ATAU
polling IDE untuk perubahan. Ini dapat dilakukan melalui antarmuka IVsFontAndColorStorage yang diterapkan sistem. Meskipun terutama untuk dukungan persistensi, metode GetItem dapat memperoleh informasi font dan warna untuk Item Tampilan. Untuk informasi selengkapnya tentang pengaturan font dan warna, lihat artikel MSDN Mengakses Font tersimpan dan Pengaturan Warna.
Catatan
Untuk memastikan bahwa hasil polling sudah benar, gunakan antarmuka IVsFontAndColorCacheManager untuk menentukan apakah cache flush dan pembaruan diperlukan sebelum memanggil metode pengambilan antarmuka IVsFontAndColorStorage .
Mendaftarkan kategori font dan warna kustom tanpa menerapkan antarmuka
Contoh kode berikut menunjukkan cara mendaftarkan font kustom dan Kategori warna tanpa menerapkan antarmuka:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp\FontAndColors\CSharp Tool Window]
"Package"="{F5E7E71D-1401-11D1-883B-0000F87579D2}"
"Category"="{9FF46859-A47E-47bf-8AC5-EC3DBE69D1FE}"
"ToolWindowPackage"="{7259e420-6241-4e0d-b535-5b820671d183}"
"NameID"=dword:00000064
Untuk contoh kode ini:
"NameID"
= ID sumber daya dari nama kategori yang dilokalkan dalam paket Anda"ToolWindowPackage"
= GUID paket"Category"="{9FF46859-A47E-47bf-8AC5-EC3DBE69D1FE}"
hanyalah contoh dan nilai aktual dapat menjadi GUID baru yang disediakan oleh pelaksana.
Mengatur GUID kategori properti Font dan Warna
Contoh kode di bawah ini menunjukkan pengaturan GUID Kategori.
// m_pView is your IVsTextView
IVsTextEditorPropertyCategoryContainer spPropCatContainer =
(IVsTextEditorPropertyCategoryContainer)m_pView;
if (spPropCatContainer != null)
{
IVsTextEditorPropertyContainer spPropContainer;
Guid GUID_EditPropCategory_View_MasterSettings =
new Guid("{D1756E7C-B7FD-49a8-B48E-87B14A55655A}");
hr = spPropCatContainer.GetPropertyCategory(
ref GUID_EditPropCategory_View_MasterSettings,
out spPropContainer);
if(hr == 0)
{
hr =
spPropContainer.SetProperty(
VSEDITPROPID.VSEDITPROPID_ViewGeneral_FontCategory,
catGUID);
hr =
spPropContainer.SetProperty(
VSEDITPROPID.VSEDITPROPID_ViewGeneral_ColorCategory,
catGUID);
}
}