Bagikan melalui


Warna dan Gaya untuk Visual Studio

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.

Tools > Options dialog
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 .

Environment color service architecture
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 GetSysColorsistem 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:

Example of how subtle details are lost in High Contrast
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:

High Contrast editor comparison
Perbandingan editor Kontras Tinggi

Contoh permukaan editor dalam tema Biru:

Editor in Blue theme
Editor dalam tema Biru

Editor in High Contrast #1 theme
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.

Implementation of IVsFontAndColorGroup
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:

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);
}
}