Share via


Colores y estilos para Visual Studio

Uso del color en Visual Studio

En Visual Studio, el color se usa principalmente como herramienta de comunicación, no solo como decoración. Use el color mínimamente y guídelo para situaciones en las que quiera:

  • Comunicar significado o afiliación (por ejemplo, modificadores de plataforma o lenguaje)

  • Atraer la atención (por ejemplo, que indica un cambio de estado)

  • Mejorar la legibilidad y proporcionar puntos de referencia para navegar por la interfaz de usuario

  • Aumento de la conveniencia

Existen varias opciones para asignar colores a elementos de la interfaz de usuario en Visual Studio. A veces puede ser difícil averiguar qué opción se supone que se va a usar o cómo usarla correctamente. Este tema le ayudará a:

  • Comprenda los diferentes servicios y sistemas que se usan para definir colores en Visual Studio.

  • Seleccione la opción correcta para un elemento determinado.

  • Use correctamente la opción que ha elegido.

Nota:

Nunca codifique de forma rígida los colores hexadecimales, RGB o del sistema a los elementos de la interfaz de usuario. El uso de los servicios permite flexibilidad en el tono de ajuste. Además, sin el servicio, no podrá aprovechar las funcionalidades de cambio de tema del servicio VSColor.

Métodos para asignar color a elementos de interfaz de Visual Studio

Elija el método más adecuado para los elementos de la interfaz de usuario.

La interfaz de usuario Método ¿Cuáles son?
Tiene cuadros de diálogo incrustados o independientes. Colores del sistema Nombres de sistema que permiten al sistema operativo definir el color y la apariencia de los elementos de la interfaz de usuario, como controles de diálogo comunes.
Tiene una interfaz de usuario personalizada que desea ser coherente con el entorno de VS general y tiene elementos de interfaz de usuario que coinciden con la categoría y el significado semántico de los tokens compartidos. Colores compartidos comunes Nombres de token de color predefinidos existentes para elementos específicos de la interfaz de usuario
Tiene una característica individual o un grupo de características y no hay ningún color compartido para elementos similares. Colores personalizados Nombres de token de color específicos de un área y que no están diseñados para compartirse con otra interfaz de usuario
Quiere permitir que el usuario final personalice la interfaz de usuario o el contenido (por ejemplo, para editores de texto o ventanas de diseñador especializadas). Personalización del usuario final

(Herramientas > Cuadro de diálogo Opciones)
Configuración definida en la página "Fuentes y colores" de la Cuadro de diálogo Opciones de herramientas > o una página especializada específica de una característica de interfaz de usuario.

Temas de Visual Studio

Visual Studio presenta tres temas de color diferentes: claro, oscuro y azul. También detecta el modo de contraste alto, que es un tema de color de todo el sistema diseñado para la accesibilidad.

Se pide a los usuarios que seleccionen un tema durante su primer uso de Visual Studio y puedan cambiar los temas más adelante; para ello, vaya a Herramientas > Opciones > Entorno > general y elija un nuevo tema en el menú desplegable "tema de color".

Los usuarios también pueden usar Panel de control para cambiar sus sistemas completos a uno de varios temas de contraste alto. Si un usuario selecciona un tema de contraste alto, el selector de temas de color de Visual Studio ya no afecta a los colores de Visual Studio, aunque se guardan los cambios de tema para cuando el usuario sale del modo contraste alto. Para obtener más información sobre el modo de contraste alto, vea Elegir colores de contraste alto.

El servicio VSColor

Visual Studio proporciona un servicio de color de entorno, conocido como servicio VSColor, que permite enlazar los valores de color de los elementos de la interfaz de usuario a una entrada con nombre que contiene valores de color para cada tema de Visual Studio. Esto garantiza que los colores cambien automáticamente para reflejar el tema seleccionado por el usuario actual o el modo de contraste alto del sistema. El uso del servicio significa que la implementación de todos los cambios de color relacionados con el tema se controla en un solo lugar y, si usa colores compartidos comunes del servicio, la interfaz de usuario reflejará automáticamente nuevos temas en futuras versiones de Visual Studio.

Implementación

El código fuente de Visual Studio incluye varios archivos de definición de paquete que contienen listas de nombres de token y los valores de color correspondientes para cada tema. El servicio de color lee los VSColors definidos en estos archivos de definición de paquete. Estos colores se hacen referencia en el marcado XAML o en el código y, a continuación, se cargan a través del IVsUIShell5.GetThemedColor método o una asignación DynamicResource.

Colores del sistema

Los controles comunes hacen referencia a los colores del sistema de forma predeterminada. Si desea que la interfaz de usuario use colores del sistema, como al crear un cuadro de diálogo incrustado o independiente, no es necesario hacer nada.

Colores compartidos comunes en el servicio VSColor

Los elementos de la interfaz deben reflejar el entorno general de Visual Studio. Al reutilizar los colores compartidos comunes que son adecuados para el componente de interfaz de usuario que está diseñando, asegúrese de que la interfaz sea coherente con otras interfaces de Visual Studio y de que los colores se actualizarán automáticamente cuando se agreguen o actualicen los temas.

Antes de usar colores compartidos comunes, asegúrese de comprender cómo usarlos correctamente. El uso incorrecto de los colores compartidos comunes podría dar lugar a una experiencia incoherente, frustrante o confusa para los usuarios.

Colores personalizables por el usuario

Consulte: Exposición de colores para usuarios finales

A veces, querrá permitir que el usuario final personalice la interfaz de usuario, como al crear un editor de código o una superficie de diseño. Los componentes personalizables de la interfaz de usuario se encuentran en la sección Fuentes y colores del cuadro de diálogo Opciones de herramientas>, donde los usuarios pueden elegir cambiar el color de primer plano, el color de fondo o ambos.

Tools > Options dialog
Cuadro de diálogo Opciones de herramientas >

El servicio VSColor

Visual Studio proporciona un servicio de color de entorno, también denominado servicio VSColor o el servicio de color del shell. Este servicio permite enlazar los valores de color de los elementos de la interfaz de usuario a un conjunto de colores de valor de nombre que contiene colores para cada tema. El servicio VSColor debe usarse para todos los elementos de la interfaz de usuario, de modo que los colores cambien automáticamente para reflejar el tema seleccionado por el usuario actual y, de este modo, la interfaz de usuario enlazada al servicio de color del entorno se integrará con nuevos temas en futuras versiones de Visual Studio.

Funcionamiento del servicio

El servicio de color de entorno lee VSColors definidos en .pkgdef para el componente de interfaz de usuario. A continuación, se hace referencia a estos VSColors en el marcado o código XAML y se cargan a través de la IVsUIShell5.GetThemedColor asignación o DynamicResource .

Environment color service architecture
Arquitectura de servicio de color del entorno

Acceso al servicio

Hay varias maneras diferentes de acceder al servicio VSColor, en función del tipo de tokens de color que use y de qué tipo de código tiene.

Colores de entorno predefinidos

Desde código nativo

El shell proporciona un servicio que proporciona acceso a los COLORREF de los colores. El servicio o la interfaz es:

IVsUIShell2::GetVSSysColorEx(VSSYSCOLOR dwSysColIndex, DWORD *pdwRGBval)

En el archivo VSShell80.idl, la enumeración __VSSYSCOLOREX tiene constantes de color de shell. Para usarlo, pase como valor de índice uno de los valores del enum __VSSYSCOLOREX documento en MSDN o un número de índice normal que acepte la API del sistema de Windows, GetSysColor, . Al hacerlo, se devuelve el valor RGB del color que se debe usar en el segundo parámetro.

Si almacena un lápiz o pincel con un nuevo color, debe AdviseBroadcastMessages (fuera del shell de Visual Studio) y escuchar WM_SYSCOLORCHANGE y WM_THEMECHANGED mensajes.

Para acceder al servicio de color en código nativo, realizará una llamada similar a la siguiente:

pUIShell2->GetVSSysColorEx(VSCOLOR_COLOR_NAME, &rgbLOCAL_COLOR);

Nota:

Los COLORREF valores devueltos por GetVSSysColorEx() contienen solo componentes R,G,B de un color de tema. Si una entrada de tema usa transparencia, el valor del canal alfa se descarta antes de devolverlo. Por lo tanto, si el color de entorno de interés debe usarse en un lugar donde el canal de transparencia es importante, debe usar IVsUIShell5.GetThemedColor en lugar de IVsUIShell2::GetVSSysColorEx, como se describe más adelante en este tema.

Desde código administrado

El acceso al servicio VSColor a través de código nativo es bastante sencillo. Sin embargo, si está trabajando con código administrado, determinar cómo usar el servicio puede ser complicado. Teniendo esto en cuenta, este es un fragmento de código de C# que muestra este proceso:

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

Si trabaja en Visual Basic, use:

Dim myColor As Color = ColorTranslator.FromWin32((Integer)win32Color)
Desde la interfaz de usuario de WPF

Puede enlazar a colores de Visual Studio a través de valores exportados a la aplicación ResourceDictionary. A continuación se muestra un ejemplo de uso de recursos de la tabla de colores, así como el enlace a los datos de fuente del entorno en 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>

Clases y métodos auxiliares para código administrado

En el caso del código administrado, la bibliotecaMicrosoft.VisualStudio.Shell.12.0.dll managed Package Framework () del shell contiene un par de clases auxiliares que facilitan el uso de colores con temas.

Los métodos auxiliares de la Microsoft.VisualStudio.Shell.VsColors clase en MPF incluyen GetThemedGDIColor() y GetThemedWPFColor(). Esos métodos auxiliares devuelven el valor de color de una entrada de tema como System.Drawing.Color o System.Windows.Media.Color, que se usará en winForms o en la interfaz de usuario de WPF.

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

La clase también se puede usar para obtener identificadores VSCOLOR para una clave de recurso de color de WPF determinada, o viceversa.

public static string GetColorBaseKey(int vsSysColor);
public static bool TryGetColorIDFromBaseKey(string baseKey, out int vsSysColor);

Los métodos de VsColors clase consultan el servicio VSColor para devolver el valor de color cada vez que se invocan. Para obtener un valor de color como System.Drawing.Color, una alternativa con un mejor rendimiento es usar en su lugar los métodos de la Microsoft.VisualStudio.PlatformUI.VSColorTheme clase , que almacena en caché los valores de color obtenidos del servicio VSColor. La clase se suscribe internamente a los eventos de mensajes de difusión de shell y descarta el valor almacenado en caché cuando se produce un evento de cambio de tema. Además, la clase proporciona un . Evento descriptivo de NET para suscribirse a los cambios de tema. Use el ThemeChanged evento para agregar un nuevo controlador y use el GetThemedColor() método para obtener valores de color para el ThemeResourceKeys de interés. Un código de ejemplo podría tener este aspecto:

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

Elección de colores de contraste alto

Windows usa varios temas de nivel de sistema de contraste alto que aumentan el contraste de color del texto, los fondos y las imágenes, lo que hace que los elementos aparezcan más distintos en la pantalla. Por motivos de accesibilidad, es importante que los elementos de la interfaz de Visual Studio respondan correctamente cuando los usuarios cambien a un tema de contraste alto.

Solo se pueden usar algunos colores del sistema para temas de contraste alto. Al elegir los nombres de color del sistema, recuerde las siguientes sugerencias:

  • Elija los colores del sistema que tengan el mismo significado semántico que el elemento que está colorando. Por ejemplo, si elige un color de contraste alto para el texto dentro de una ventana, use WindowText y no ControlText.

  • Elija pares de primer plano/fondo juntos o no estará seguro de que su elección de color funcionará en todos los temas de contraste alto.

  • Determine qué partes de la interfaz de usuario son las más importantes y asegúrese de que las áreas de contenido se destacarán. Perderá un montón de detalles que las diferencias sutiles en el tono de color normalmente distinguirían, por lo que el uso de colores de borde fuertes es común para definir áreas de contenido, ya que no hay variantes de color para diferentes áreas de contenido.

Conjunto de colores del sistema

La tabla del Blog del equipo de WPF: SystemColors Reference indica el conjunto completo de nombres de color del sistema y los tonos correspondientes que se muestran en cada tema.

Al aplicar este conjunto limitado de colores a la interfaz de usuario, se espera que pierda detalles sutiles que estaban presentes en los temas "normales". Este es un ejemplo de interfaz de usuario con colores grises sutiles que se usan para distinguir áreas dentro de una ventana de herramientas. Cuando se empareja con la misma ventana que se muestra en modo contraste alto, puede ver que todos los fondos son el mismo tono y los bordes de esas áreas se indican solo por borde:

Example of how subtle details are lost in High Contrast
Ejemplo de cómo se pierden los detalles sutiles en contraste alto

Elección de colores de texto en un editor

El texto coloreado se usa en un editor o en una superficie de diseño para indicar significado, como permitir una fácil identificación de grupos de elementos similares. Sin embargo, en un tema de contraste alto, no tiene la capacidad de diferenciar entre más de tres colores de texto. WindowText, GrayText y HotTrackText son los únicos colores disponibles en las superficies WindowBackground. Puesto que no puedes usar más de tres colores, elige cuidadosamente las diferencias más importantes que quieres mostrar cuando estés en modo contraste alto.

Hues para cada uno de los nombres de token permitidos en una superficie del editor, como aparecen en cada tema de contraste alto:

High Contrast editor comparison
Comparación de editor de contraste alto

Ejemplos de la superficie del editor en el tema Azul:

Editor in Blue theme
Editor en el tema azul

Editor in High Contrast #1 theme
Editor en el tema de contraste alto n.º 1

Patrones de uso

Muchos elementos comunes de la interfaz de usuario ya tienen definidos colores de contraste alto. Puede hacer referencia a estos patrones de uso al elegir sus propios nombres de color del sistema, de modo que los elementos de la interfaz de usuario sean coherentes con componentes similares.

Color del sistema Uso
ActiveCaption - IDE activo y glifos de botón de ventana de balsa al mantener el puntero y presionar
- Fondo de la barra de título para IDE y ventanas de balsa
- Fondo de la barra de estado predeterminada
ActiveCaptionText - IDE activo y ventanas de balsa para primer plano de la barra de título (texto y glifos)
- Fondo y borde de botones de ventana activa al mantener el puntero y presionar
Control - Cuadro combinado, lista desplegable y control de búsqueda predeterminado y fondo deshabilitado, incluido el botón desplegable
- Fondo del botón de destino de acoplamiento
- Fondo de la barra de comandos
- Fondo de la ventana de herramientas
ControlDark - Fondo del IDE
- Separadores de barra de menús y comandos
- Borde de la barra de comandos
- Sombras de menú
- Pestaña de la ventana de herramientas predeterminada y el borde y separador del puntero
- Fondo del botón de desbordamiento del documento
- Borde del glifo de destino de acoplamiento
ControlDarkDark - Ventana de pestaña de documento seleccionada sin foco
ControlLight - Borde de tabulación oculta automática
- Cuadro combinado y borde de lista desplegable
- Acoplar fondo y borde de destino
ControlLightLight - Borde provisional seleccionado y centrado
ControlText - Cuadro combinado y glifo de lista desplegable
- Texto de tabulación sin seleccionar de la ventana de herramientas
GrayText - Cuadro combinado y lista desplegable borde deshabilitado, glifo desplegable, texto y texto del elemento de menú
- Texto del menú Deshabilitado
- Texto del encabezado "opciones de búsqueda" del control de búsqueda
- Separador de sección de control de búsqueda
Resaltar - Todos los fondos y bordes presionados, excepto el fondo del botón desplegable del cuadro combinado y el borde del botón de desbordamiento del documento
- Fondos de elementos seleccionados
HighlightText - Todo el mouse y presionado primer plano (texto y glifos)
- Ventana de herramientas centrada y control de ventana de pestañas de documento primer plano
- Borde de la barra de título de la ventana de herramientas centrada
- Foco, pestaña provisional seleccionada en primer plano
- Borde del botón de desbordamiento del pozo del documento al mantener el puntero y presionar
- Borde de icono seleccionado
HotTrack - Fondo y borde de la barra de desplazamiento de la barra de desplazamiento al presionar
- Glifo de flecha de barra de desplazamiento al presionar
InactiveCaption - IDE inactivo y glifos de botón de ventana de balsa al mantener el puntero
- Fondo de la barra de título para IDE y ventanas de balsa
- Fondo del control de búsqueda deshabilitado
InactiveCaptionText - IDE inactivo y barra de título de ventanas en primer plano (texto y glifos)
- Botones de ventana inactivos fondo y borde al mantener el puntero
- Fondo y borde de la ventana de herramientas sin enfoque
- Deshabilitado control de búsqueda en primer plano
Menu - Fondo del menú desplegable
- Fondo de marca de verificación activada y deshabilitada
MenuText - Borde del menú desplegable
- Marcas de verificación
- Glifos de menú
- Texto del menú desplegable
- Borde de icono seleccionado
Barra de desplazamiento - Barra de desplazamiento y fondo de flecha de barra de desplazamiento, todos los estados
Ventana - Ocultar automáticamente el fondo de la pestaña
- Barra de menús y fondo de la estantería de comandos
- Desenfocado o sin seleccionar el fondo de la pestaña de la ventana del documento y el borde del documento, tanto para pestañas abiertas como provisionales
- Fondo de la barra de título de la ventana de herramientas sin enfoque
- Fondo de pestaña de ventana de herramientas, seleccionados y no seleccionados
WindowFrame - Borde del IDE
WindowText - Ocultar automáticamente el primer plano de la pestaña
- Pestaña de primer plano de la ventana de herramientas seleccionada
- Pestaña de la ventana de documento sin enfoque y pestaña provisional sin foco o sin seleccionar primer plano
- Primer plano predeterminado de la vista de árbol y mantener el puntero sobre glifo no seleccionado
- Borde de pestaña seleccionado en la ventana de herramientas
- Fondo, borde y glifo de la barra de desplazamiento

Exponer colores para los usuarios finales

A veces, querrá permitir que el usuario final personalice la interfaz de usuario, como cuando cree un editor de código o una superficie de diseño. La manera más común de hacerlo es mediante el cuadro de diálogo Opciones de herramientas>. A menos que tenga una interfaz de usuario muy especializada que requiera controles especiales, la manera más fácil de presentar la personalización es a través de la página Fuentes y colores dentro de la sección Entorno del cuadro de diálogo. Para cada elemento que exponga para la personalización, el usuario puede elegir cambiar el color de primer plano, el color de fondo o ambos.

Crear un VSPackage para los colores personalizables

Un VSPackage puede controlar las fuentes y los colores a través de categorías personalizadas y mostrar elementos en la página de propiedades Fuentes y colores. Al usar este mecanismo, VSPackages debe implementar la interfaz IVsFontAndColorDefaultsProvider y sus interfaces asociadas.

En principio, este mecanismo se puede usar para modificar todos los elementos de visualización existentes y las categorías que los contienen. Sin embargo, no se debe usar para modificar la categoría Editor de texto o sus elementos para mostrar. Para obtener más información sobre la categoría Editor de texto, vea Información general sobre fuentes y colores.

Para implementar categorías personalizadas o mostrar elementos, un VSPackage debe:

  • Cree o identifique categorías en el Registro. La implementación del IDE de la página de propiedades Fuentes y colores usa esta información para consultar correctamente el servicio que admite una categoría determinada.

  • Cree o identifique grupos en el Registro (opcional). Puede resultar útil definir un grupo, que representa la unión de dos o más categorías. Si se define un grupo, el IDE combina automáticamente las subcategorías y distribuye los elementos para mostrar dentro del grupo.

  • Implemente la compatibilidad con ide.

  • Controle los cambios de fuente y color.

Para crear o identificar categorías

Construya un tipo especial de entrada del Registro de categorías en [HKLM\SOFTWARE\Microsoft \Visual Studio\\<Visual Studio version\>\FontAndColors\\<Category\>]<Category> donde es el nombre no localizado de la categoría.

Rellene el registro con dos valores:

Nombre Tipo data Descripción
Category REG_SZ GUID Guid creado para identificar la categoría
Paquete REG_SZ GUID GUID del servicio VSPackage que admite la categoría

El servicio especificado en el Registro debe proporcionar una implementación de IVsFontAndColorDefaults para la categoría correspondiente.

Para crear o identificar grupos

Construya un tipo especial de entrada del Registro de categorías en [HKLM\SOFTWARE\Microsoft \Visual Studio\\<Visual Studio version\>\FontAndColors\\<group\>]<group> donde es el nombre no localizado del grupo.

Rellene el registro con dos valores:

Nombre Tipo data Descripción
Category REG_SZ GUID Guid creado para identificar la categoría
Paquete REG_SZ GUID GUID del servicio VSPackage que admite la categoría

El servicio especificado en el Registro debe proporcionar una implementación de IVsFontAndColorGroup para el grupo correspondiente.

Implementation of IVsFontAndColorGroup
Implementación de IVsFontAndColorGroup

Para implementar la compatibilidad con IDE

Implemente GetObject, que devuelve una interfaz IVsFontAndColorDefaults o una IVsFontAndColorGroup interfaz al IDE para cada guid de categoría o grupo proporcionado.

Para cada categoría que admita, un VSPackage implementa una instancia independiente de la interfaz IVsFontAndColorDefaults .

Los métodos implementados a través de IVsFontAndColorDefaults deben proporcionar al IDE:

  • Listas de elementos para mostrar en la categoría

  • Nombres localizables para elementos para mostrar

  • Mostrar información para cada miembro de la categoría

Nota:

Cada categoría debe contener al menos un elemento para mostrar.

El IDE usa la IVsFontAndColorGroup interfaz para definir una unión de varias categorías.

Su implementación proporciona al IDE:

  • Lista de las categorías que componen un grupo determinado

  • Acceso a instancias de IVsFontAndColorDefaults que admiten cada categoría dentro del grupo

  • Nombres de grupo localizables

Actualización del IDE

El IDE almacena en caché información sobre la configuración de fuente y color. Por lo tanto, después de cualquier modificación de la configuración de fuente y color del IDE, asegurarse de que la memoria caché está actualizada es un procedimiento recomendado.

La actualización de la caché se realiza a través de la interfaz IvsFontAndColorCacheManager y se puede realizar globalmente o solo en los elementos seleccionados.

Control de los cambios de fuente y color

Para admitir correctamente la coloración del texto que muestra un VSPackage, el servicio de colorización que admite VSPackage debe responder a los cambios iniciados por el usuario realizados a través de la página de propiedades Fuentes y colores.

Para ello, un VSPackage debe:

  • controle los eventos generados por el IDE mediante la implementación de la interfaz IVsFontAndColorEvents . El IDE llama al método adecuado después de las modificaciones del usuario de la página Fuentes y colores. Por ejemplo, llama al método OnFontChanged si se selecciona una nueva fuente.

    OR

  • sondee los cambios en el IDE. Esto se puede hacer a través de la interfaz IVsFontAndColorStorage implementada por el sistema. Aunque principalmente para admitir la persistencia, el método GetItem puede obtener información de fuente y color para elementos de visualización. Para obtener más información sobre la configuración de fuente y color, consulte el artículo de MSDN Acceso a fuentes almacenadas y Configuración de color.

Nota:

Para asegurarse de que los resultados de sondeo son correctos, use la interfaz IVsFontAndColorCacheManager para determinar si se necesita un vaciado de caché y una actualización antes de llamar a los métodos de recuperación de la interfaz IVsFontAndColorStorage .

Registro de la fuente personalizada y la categoría de color sin implementar interfaces

En el ejemplo de código siguiente se muestra cómo registrar la fuente personalizada y la categoría de color sin implementar interfaces:

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

Para este ejemplo de código:

  • "NameID" = el identificador de recurso del nombre de categoría localizado en el paquete.
  • "ToolWindowPackage" = GUID de paquete
  • "Category"="{9FF46859-A47E-47bf-8AC5-EC3DBE69D1FE}" es solo un ejemplo y el valor real puede ser un nuevo GUID proporcionado por el implementador.

Establecer el GUID de categoría de la propiedad Fuente y Color

En el ejemplo de código siguiente se muestra cómo establecer GUID de categoría.

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