Cores e estilo para Visual Studio
Usar cores no Visual Studio
No Visual Studio, a cor é usada principalmente como uma ferramenta de comunicação, não apenas como decoração. Use a cor minimamente e reserve-a para situações em que você deseja:
Comunicar significado ou afiliação (por exemplo, modificadores de plataforma ou idioma)
Atrair atenção (por exemplo, indicando uma mudança de status)
Melhorar a legibilidade e fornecer pontos de referência para navegar na interface do usuário
Aumentar a desejabilidade
Existem várias opções para atribuir cores a elementos da interface do usuário no Visual Studio. Às vezes, pode ser difícil descobrir qual opção você deve usar ou como usá-la corretamente. Este tópico irá ajudá-lo a:
Compreenda os diferentes serviços e sistemas usados para definir cores no Visual Studio.
Selecione a opção correta para um determinado elemento.
Use corretamente a opção escolhida.
Observação
Nunca codifique hex, RGB ou cores do sistema para seus elementos da interface do usuário. O uso dos serviços permite flexibilidade no ajuste de tonalidade. Além disso, sem o serviço, você não poderá aproveitar os recursos de troca de tema do serviço VSColor.
Métodos para atribuir cor a elementos de interface do Visual Studio
Escolha o método mais adequado aos elementos da interface do usuário.
Sua interface do usuário | Método | Quais são eles? |
---|---|---|
Você tem caixas de diálogo incorporadas ou autônomas. | Cores do Sistema | Nomes de sistema que permitem que o sistema operacional defina a cor e a aparência dos elementos da interface do usuário, como controles de caixa de diálogo comuns. |
Você tem uma interface do usuário personalizada que deseja ser consistente com o ambiente VS geral e tem elementos de interface do usuário que correspondem à categoria e ao significado semântico dos tokens compartilhados. | Cores comuns compartilhadas | Nomes de token de cores predefinidos existentes para elementos específicos da interface do usuário |
Você tem um recurso individual ou um grupo de recursos e não há cor compartilhada para elementos semelhantes. | Cores personalizadas | Nomes de token de cor que são específicos de uma área e não devem ser compartilhados com outra interface do usuário |
Você deseja permitir que o usuário final personalize a interface do usuário ou o conteúdo (por exemplo, para editores de texto ou janelas de designer especializadas). | Personalização do usuário final (Ferramentas > Caixa de diálogo Opções) |
Configurações definidas na página "Fontes e cores" da caixa de diálogo Opções de ferramentas > ou em uma página especializada específica para um recurso de interface do usuário. |
Temas do Visual Studio
O Visual Studio apresenta três temas de cores diferentes: claro, escuro e azul. Ele também detecta o modo de alto contraste, que é um tema de cores de todo o sistema projetado para acessibilidade.
Os usuários são solicitados a selecionar um tema durante seu primeiro uso do Visual Studio e podem alternar temas mais tarde, indo para Ferramentas > Opções > Ambiente > Geral e escolhendo um novo tema no menu suspenso "tema de cores".
Os usuários também podem usar o Painel de Controle para alternar seus sistemas inteiros em um dos vários temas de Alto Contraste. Se um usuário selecionar um tema de Alto Contraste, o seletor de tema de cores do Visual Studio não afetará mais as cores no Visual Studio, embora quaisquer alterações de tema sejam salvas para quando o usuário sair do modo de Alto Contraste. Para obter mais informações sobre o modo de Alto Contraste, consulte Escolhendo cores de Alto Contraste.
O serviço VSColor
O Visual Studio fornece um serviço de cores de ambiente, conhecido como serviço VSColor, que permite vincular os valores de cor dos elementos da interface do usuário a uma entrada nomeada que contém valores de cor para cada tema do Visual Studio. Isso garante que suas cores serão alteradas automaticamente para refletir o tema atual selecionado pelo usuário ou o modo de Alto Contraste do sistema. O uso do serviço significa que a implementação de todas as alterações de cores relacionadas ao tema é tratada em um só lugar e, se você estiver usando cores compartilhadas comuns do serviço, sua interface do usuário refletirá automaticamente novos temas em versões futuras do Visual Studio.
Implementação
O código-fonte do Visual Studio inclui vários arquivos de definição de pacote que contêm listas de nomes de token e os respectivos valores de cor para cada tema. O serviço de cores lê os VSColors definidos nesses arquivos de definição de pacote. Essas cores são referenciadas na marcação XAML ou no código e, em seguida, carregadas por meio do método ou de IVsUIShell5.GetThemedColor
um mapeamento DynamicResource.
Cores do Sistema
Os controles comuns fazem referência às cores do sistema por padrão. Se você quiser que sua interface do usuário use cores do sistema, como quando estiver criando uma caixa de diálogo incorporada ou autônoma, não precisará fazer nada.
Cores compartilhadas comuns no serviço VSColor
Seus elementos de interface devem refletir o ambiente geral do Visual Studio. Ao reutilizar as cores compartilhadas comuns que são apropriadas para o componente de interface do usuário que você está criando, você garante que sua interface seja consistente com outras interfaces do Visual Studio e que suas cores serão atualizadas automaticamente quando os temas forem adicionados ou atualizados.
Antes de usar cores compartilhadas comuns, certifique-se de entender como usá-las corretamente. O uso incorreto de cores compartilhadas comuns pode resultar em uma experiência inconsistente, frustrante ou confusa para seus usuários.
Cores personalizáveis pelo usuário
Consulte: Expondo cores para usuários finais
Às vezes, você desejará permitir que o usuário final personalize sua interface do usuário, como quando você estiver criando um editor de código ou superfície de design. Os componentes personalizáveis da interface do usuário são encontrados na seção Fontes e Cores da caixa de diálogo Opções de Ferramentas>, onde os usuários podem optar por alterar a cor do primeiro plano, a cor do plano de fundo ou ambas.
Caixa de diálogo Opções de Ferramentas >
O serviço VSColor
O Visual Studio fornece um serviço de cores de ambiente, também chamado de serviço VSColor ou serviço de cores do shell. Esse serviço permite vincular os valores de cor dos elementos da interface do usuário a um conjunto de cores de nome-valor contendo cores para cada tema. O serviço VSColor deve ser usado para todos os elementos da interface do usuário, para que as cores sejam alteradas automaticamente para refletir o tema atual selecionado pelo usuário e para que a interface do usuário vinculada ao serviço de cores do ambiente se integre a novos temas em versões futuras do Visual Studio.
Como funciona o serviço
O serviço de cores do ambiente lê VSColors definidos no .pkgdef para o componente da interface do usuário. Esses VSColors são referenciados em marcação ou código XAML e são carregados por meio de IVsUIShell5.GetThemedColor
um DynamicResource
mapeamento.
Arquitetura do serviço de cores do ambiente
Acessando o serviço
Há várias maneiras diferentes de acessar o serviço VSColor, dependendo do tipo de tokens de cor que você está usando e do tipo de código que você tem.
Cores de ambiente predefinidas
Do código nativo
O shell fornece um serviço que dá acesso ao COLORREF
das cores. O serviço/interface é:
IVsUIShell2::GetVSSysColorEx(VSSYSCOLOR dwSysColIndex, DWORD *pdwRGBval)
No arquivo VSShell80.idl, a enumeração tem constantes de __VSSYSCOLOREX
cor do shell. Para usá-lo, passe como o valor de índice um dos valores do documentado no MSDN ou um número de índice regular que a API do enum __VSSYSCOLOREX
sistema Windows, , GetSysColor
aceita. Fazendo isso, obtém de volta o valor RGB da cor que deve ser usada no segundo parâmetro.
Se estiver armazenando uma caneta ou pincel com uma nova cor, você deve AdviseBroadcastMessages
(fora do shell do Visual Studio) e ouvir WM_SYSCOLORCHANGE
e WM_THEMECHANGED
mensagens.
Para acessar o serviço de cores em código nativo, você fará uma chamada semelhante a esta:
pUIShell2->GetVSSysColorEx(VSCOLOR_COLOR_NAME, &rgbLOCAL_COLOR);
Observação
Os COLORREF
valores retornados por GetVSSysColorEx()
contêm apenas componentes R,G,B de uma cor de tema. Se uma entrada de tema usar transparência, o valor do canal alfa será descartado antes de retornar. Portanto, se a cor do ambiente de interesse precisar ser usada em um local onde o canal de transparência é importante, você deve usar IVsUIShell5.GetThemedColor
em vez de IVsUIShell2::GetVSSysColorEx
, como descrito posteriormente neste tópico.
Do código gerenciado
Acessar o serviço VSColor por meio de código nativo é bastante simples. No entanto, se você estiver trabalhando com código gerenciado, determinar como usar o serviço pode ser complicado. Com isso em mente, aqui está um trecho de código C# demonstrando esse processo:
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);
}
}
Se você estiver trabalhando no Visual Basic, use:
Dim myColor As Color = ColorTranslator.FromWin32((Integer)win32Color)
Da interface do usuário do WPF
Você pode vincular a cores do Visual Studio por meio de ResourceDictionary
valores exportados para o . Veja abaixo um exemplo de uso de recursos da tabela de cores, bem como vinculação aos dados de fonte do ambiente em 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>
Classes e métodos auxiliares para código gerenciado
Para código gerenciado, a biblioteca Managed Package Framework (Microsoft.VisualStudio.Shell.12.0.dll
) do shell contém algumas classes auxiliares que facilitam o uso de cores temáticas.
Os métodos auxiliares na Microsoft.VisualStudio.Shell.VsColors
classe no MPF incluem GetThemedGDIColor()
e GetThemedWPFColor()
. Esses métodos auxiliares retornam o valor de cor de uma entrada de tema como System.Drawing.Color
ou , a ser usado no WinForms ou System.Windows.Media.Color
na interface do usuário do 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]);
}
A classe também pode ser usada para obter identificadores VSCOLOR para uma determinada chave de recurso de cor WPF, ou vice-versa.
public static string GetColorBaseKey(int vsSysColor);
public static bool TryGetColorIDFromBaseKey(string baseKey, out int vsSysColor);
Os métodos de classe consultam o serviço VSColor para retornar o valor de VsColors
cor cada vez que são chamados. Para obter um valor de cor como System.Drawing.Color
, uma alternativa com melhor desempenho é usar os Microsoft.VisualStudio.PlatformUI.VSColorTheme
métodos da classe, que armazena em cache os valores de cor obtidos do serviço VSColor. A classe assina internamente eventos de mensagens de difusão do shell e descarta o valor armazenado em cache quando ocorre um evento de alteração de tema. Além disso, a classe fornece um arquivo . NET-friendly evento para se inscrever para alterações de tema. Use o evento para adicionar um novo manipulador e use o método para obter valores de cor para o ThemeChanged
GetThemedColor()
ThemeResourceKeys
de interesse. Um código de exemplo pode ter esta aparência:
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);}
}
Escolhendo cores de alto contraste
O Windows usa vários temas de alto contraste no nível do sistema que aumentam o contraste de cores de texto, planos de fundo e imagens, fazendo com que os elementos pareçam mais distintos na tela. Por motivos de acessibilidade, é importante que os elementos de interface do Visual Studio respondam corretamente quando os usuários alternam para um tema de Alto Contraste.
Apenas um punhado de cores do sistema pode ser usado para temas de alto contraste. Ao escolher os nomes de cores do sistema, lembre-se das seguintes dicas:
Escolha cores do sistema que tenham o mesmo significado semântico que o elemento que você está colorindo. Por exemplo, se você estiver escolhendo uma cor de alto contraste para texto dentro de uma janela, use WindowText e não ControlText.
Escolha pares de primeiro plano/plano de fundo juntos ou você não terá certeza de que sua escolha de cor funcionará em todos os temas de Alto Contraste.
Determine quais partes da interface do usuário são as mais importantes e garanta que as áreas de conteúdo se destaquem. Você perderá muitos detalhes que diferenças sutis na tonalidade de cor normalmente distinguiriam, então o uso de cores de borda fortes é comum para definir áreas de conteúdo, porque não há variantes de cores para diferentes áreas de conteúdo.
Conjunto de cores do sistema
A tabela no WPF Team Blog: SystemColors Reference indica o conjunto completo de nomes de cores do sistema e os matizes correspondentes exibidos em cada tema.
Ao aplicar esse conjunto limitado de cores à sua interface do usuário, espera-se que você perca detalhes sutis que estavam presentes nos temas "normais". Aqui está um exemplo de interface do usuário com cores cinza sutis que são usadas para distinguir áreas dentro de uma janela de ferramenta. Quando emparelhado com a mesma janela exibida no modo de Alto Contraste, você pode ver que todos os planos de fundo são da mesma tonalidade e as bordas dessas áreas são indicadas apenas pela borda:
Exemplo de como detalhes sutis são perdidos em Alto Contraste
Escolhendo cores de texto em um editor
O texto colorido é usado em um editor ou em uma superfície de design para indicar significado, como permitir a fácil identificação de grupos de itens semelhantes. Em um tema de alto contraste, no entanto, você não tem a capacidade de diferenciar entre mais de três cores de texto. WindowText, GrayText e HotTrackText são as únicas cores disponíveis em superfícies WindowBackground. Como você não pode usar mais de três cores, escolha cuidadosamente as diferenças mais importantes que deseja exibir quando estiver no modo de Alto Contraste.
Matizes para cada um dos nomes de token permitidos em uma superfície de editor, conforme aparecem em cada tema de Alto Contraste:
Comparação do editor de alto contraste
Exemplos da superfície do editor no tema Azul:
Editor no tema azul
Editor no tema Alto Contraste #1
Padrões de uso
Muitos elementos comuns da interface do usuário já têm cores de alto contraste definidas. Você pode fazer referência a esses padrões de uso ao escolher seus próprios nomes de cores do sistema, para que os elementos da interface do usuário sejam consistentes com componentes semelhantes.
Cor do sistema | Uso |
---|---|
ActiveCaption | - IDE ativo e glifos de botão de janela rafted ao passar o mouse e pressionar - Fundo da barra de título para IDE e janelas rafted - Fundo da barra de status padrão |
ActiveCaptionText | - IDE ativo e janelas rafted para primeiro plano da barra de título (texto e glifos) - Fundo e borda dos botões de janela ativa ao passar o mouse e pressionar |
Control | - Caixa de combinação, lista suspensa e controle de pesquisa padrão e plano de fundo desativado, incluindo botão suspenso - Fundo do botão de destino do dock - Fundo da barra de comandos - Fundo da janela de ferramentas |
ControlDark | - Fundo do IDE - Separadores de menu e barra de comandos - Borda da barra de comandos - Sombras do menu - Janela de ferramentas guia padrão e borda de foco e separador - Fundo do botão de estouro do documento - Borda do glifo do alvo da doca |
ControlDarkDark | - Janela de guia de documento selecionada sem foco |
ControlLight | - Ocultar automaticamente a borda da guia - Caixa de combinação e borda da lista suspensa - Fundo e borda do alvo do dock |
ControlLightLight | - Borda provisória selecionada e focalizada |
ControlText | - Caixa de combinação e glifo da lista suspensa - Texto da guia não selecionada da janela de ferramenta |
Texto em cinza | - Caixa de combinação e lista suspensa borda desativada, glifo suspenso, texto e texto do item de menu - Texto do menu desativado - Controle de pesquisa 'opções de pesquisa' texto do cabeçalho - Separador de seção de controle de pesquisa |
Destaque | - Todos os fundos e bordas focalizados e pressionados, exceto fundo do botão suspenso da caixa de combinação e borda do botão de estouro do documento - Planos de fundo de itens selecionados |
DestaqueTexto | - Todos os primeiros planos focalizados e pressionados (texto e glifos) - Janela de ferramenta focada e janela de guia de documento de controle de primeiro plano - Borda da barra de título da janela de ferramentas focada - Primeiro plano da guia provisória focalizada e selecionada - Documente a borda do botão de estouro do poço ao passar o mouse e pressione - Borda do ícone selecionado |
HotTrack | - Barra de rolagem, fundo do polegar e borda na imprensa - Glifo de seta da barra de rolagem na imprensa |
InactiveCaption | - IDE inativo e glifos de botão de janela rafted ao passar o mouse - Fundo da barra de título para IDE e janelas rafted - Fundo de controle de pesquisa desativado |
InactiveCaptionText | - IDE inativo e janelas de rafted em primeiro plano da barra de título (texto e glifos) - Botões de janela inativos fundo e borda ao passar o mouse - Fundo e borda do botão da janela de ferramentas desfocados - Controle de pesquisa desativado em primeiro plano |
Menu | - Fundo do menu suspenso - Verificado e desativado fundo de marca de verificação |
MenuText | - Borda do menu suspenso - Marcas de verificação - Glifos do menu - Texto do menu suspenso - Borda do ícone selecionado |
Barra de rolagem | - Barra de rolagem e fundo de seta da barra de rolagem, todos os estados |
Janela | - Ocultar automaticamente o fundo da guia - Barra de menus e fundo de prateleira de comandos - Fundo da guia da janela do documento sem foco ou não selecionado e borda do documento, para guias abertas e provisórias - Fundo da barra de título da janela de ferramentas desfocada - Fundo da guia da janela de ferramentas, selecionado e não selecionado |
WindowFrame | - Borda IDE |
WindowText | - Auto-ocultar primeiro plano da guia - Janela de ferramentas selecionada em primeiro plano - Guia da janela do documento sem foco e primeiro plano da guia provisória não focada ou não selecionada - Visualização em árvore em primeiro plano padrão e passe o mouse sobre o glifo não selecionado - Janela de ferramenta selecionada borda da guia - Fundo do polegar da barra de rolagem, borda e glifo |
Expondo cores para usuários finais
Às vezes, você vai querer permitir que o usuário final personalize sua interface do usuário, como quando você está criando um editor de código ou superfície de design. A maneira mais comum de fazer isso é usando a caixa de diálogo Opções de ferramentas>. A menos que você tenha uma interface do usuário altamente especializada que exija controles especiais, a maneira mais fácil de apresentar a personalização é por meio da página Fontes e Cores na seção Ambiente da caixa de diálogo. Para cada elemento exposto para personalização, o usuário pode optar por alterar a cor de primeiro plano, a cor do plano de fundo ou ambas.
Criando um VSPackage para suas cores personalizáveis
Um VSPackage pode controlar as fontes e cores por meio de categorias personalizadas e exibir itens na página de propriedades Fontes e Cores. Ao usar esse mecanismo, VSPackages deve implementar a interface IVsFontAndColorDefaultsProvider e suas interfaces associadas.
Em princípio, esse mecanismo pode ser usado para modificar todos os itens de exibição existentes e as categorias que os contêm. No entanto, ele não deve ser usado para modificar a categoria Editor de texto ou seus itens de exibição. Para obter mais informações sobre a categoria Editor de texto, consulte Visão geral sobre fonte e cor.
Para implementar categorias personalizadas ou exibir Itens, um VSPackage deve:
Criar ou identificar categorias no Registro. A implementação do IDE da página de propriedades Fontes e Cores usa essas informações para consultar corretamente o serviço que oferece suporte a uma determinada categoria.
Criar ou identificar grupos no Registro (opcional). Pode ser útil definir um grupo, que representa a união de duas ou mais categorias. Se um grupo for definido, o IDE mesclará automaticamente subcategorias e distribuirá itens de exibição dentro do grupo.
Implemente o suporte ao IDE.
Lidar com alterações de fonte e cor.
Para criar ou identificar categorias
Construa um tipo especial de entrada de registro de categoria em [HKLM\SOFTWARE\Microsoft \Visual Studio\\<Visual Studio version\>\FontAndColors\\<Category\>]
que <Category>
é o nome não localizado da categoria.
Preencha o registro com dois valores:
Nome | Tipo | Dados | Descrição |
---|---|---|---|
Categoria | REG_SZ | GUID | Um GUID criado para identificar a categoria |
Pacote | REG_SZ | GUID | O GUID do serviço VSPackage que oferece suporte à categoria |
O serviço especificado no registro deve fornecer uma implementação de IVsFontAndColorDefaults para a categoria correspondente.
Para criar ou identificar grupos
Construa um tipo especial de entrada de registro de categoria em [HKLM\SOFTWARE\Microsoft \Visual Studio\\<Visual Studio version\>\FontAndColors\\<group\>]
que <group>
é o nome não localizado do grupo.
Preencha o registro com dois valores:
Nome | Tipo | Dados | Descrição |
---|---|---|---|
Categoria | REG_SZ | GUID | Um GUID criado para identificar a categoria |
Pacote | REG_SZ | GUID | O GUID do serviço VSPackage que oferece suporte à categoria |
O serviço especificado no registro deve fornecer uma implementação de IVsFontAndColorGroup para o grupo correspondente.
Implementação de IVsFontAndColorGroup
Para implementar o suporte ao IDE
Implemente GetObject, que retorna uma interface IVsFontAndColorDefaults ou uma IVsFontAndColorGroup interface para o IDE para cada GUID de categoria ou grupo fornecido.
Para cada categoria suportada, um VSPackage implementa uma instância separada da interface IVsFontAndColorDefaults .
Os métodos implementados por meio de IVsFontAndColorDefaults devem fornecer ao IDE:
Listas de itens de exibição na categoria
Nomes localizáveis para itens de exibição
Exibir informações para cada membro da categoria
Observação
Cada categoria deve conter pelo menos um item de exibição.
O IDE usa a IVsFontAndColorGroup interface para definir uma união de várias categorias.
Sua implementação fornece ao IDE:
Uma lista das categorias que compõem um determinado grupo
Acesso a instâncias de IVsFontAndColorDefaults com suporte a cada Categoria dentro do grupo
Nomes de grupos localizáveis
Atualizando o IDE
O IDE armazena em cache informações sobre as configurações de Fonte e Cor. Portanto, após qualquer modificação da configuração de fonte e cor do IDE, garantir que o cache esteja atualizado é uma prática recomendada.
A atualização do cache é feita através da interface IvsFontAndColorCacheManager e pode ser realizada globalmente ou apenas em itens selecionados.
Manipulando alterações de fonte e cor
Para oferecer suporte adequado à colorização de texto que um VSPackage exibe, o serviço de colorização que oferece suporte ao VSPackage deve responder às alterações iniciadas pelo usuário feitas por meio da página de propriedades Fontes e Cores.
Para fazer isso, um VSPackage deve:
manipular eventos gerados pelo IDE implementando a interface IVsFontAndColorEvents . O IDE chama o método apropriado após modificações do usuário na página Fontes e cores. Por exemplo, ele chama o método OnFontChanged se uma nova fonte for selecionada.
OR
sondar o IDE para obter alterações. Isso pode ser feito através da interface IVsFontAndColorStorage implementada pelo sistema. Embora principalmente para suporte de persistência, o GetItem método pode obter informações de fonte e cor para Exibir itens. Para obter mais informações sobre configurações de fonte e cor, consulte o artigo do MSDN Acessando configurações de fonte e cor armazenadas.
Observação
Para garantir que os resultados da sondagem estejam corretos, use a interface IVsFontAndColorCacheManager para determinar se uma liberação e atualização de cache são necessárias antes de chamar os métodos de recuperação da interface IVsFontAndColorStorage .
Registrando fonte personalizada e categoria de cor sem implementar interfaces
O exemplo de código a seguir demonstra como registrar a fonte personalizada e cor Category sem 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 exemplo de código:
"NameID"
= o ID do recurso do nome da categoria localizada no pacote"ToolWindowPackage"
= GUID do pacote"Category"="{9FF46859-A47E-47bf-8AC5-EC3DBE69D1FE}"
é apenas um exemplo e o valor real pode ser um novo GUID fornecido pelo implementador.
Definir o GUID da categoria de propriedade Fonte e Cor
O exemplo de código abaixo demonstra a configuração de GUIDs de categoria.
// 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);
}
}