Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Utiliser la couleur dans Visual Studio
Dans Visual Studio, la couleur est principalement utilisée comme outil de communication, pas seulement comme décoration. Utilisez la couleur minimalement et réservez-la pour les situations où vous souhaitez :
Communiquer la signification ou l’affiliation (par exemple, les modificateurs de plateforme ou de langage)
Attirer l’attention (par exemple, indiquant un changement d’état)
Améliorer la lisibilité et fournir des repères pour naviguer dans l’interface utilisateur
Augmenter la désirabilité
Plusieurs options existent pour attribuer des couleurs à des éléments d’interface utilisateur dans Visual Studio. Parfois, il peut être difficile de déterminer quelle option vous êtes censé utiliser, ou comment l’utiliser correctement. Cette rubrique vous aidera à :
Comprendre les différents services et systèmes utilisés pour définir des couleurs dans Visual Studio.
Sélectionnez l’option appropriée pour un élément donné.
Utilisez correctement l’option que vous avez choisie.
Remarque
Ne codez jamais en dur les couleurs hexadécimale, RVB ou système dans vos éléments d’interface utilisateur. L’utilisation des services permet une flexibilité en matière de réglage de teinte. En outre, sans le service, vous ne pourrez pas tirer parti des fonctionnalités de basculement de thème du service VSColor.
Méthodes d’affectation de couleur à des éléments d’interface Visual Studio
Choisissez la méthode la mieux adaptée à vos éléments d’interface utilisateur.
Votre interface utilisateur | Méthode | Quelles sont-elles ? |
---|---|---|
Vous avez des boîtes de dialogue incorporées ou autonomes. | Couleurs système | Noms système qui permettent au système d’exploitation de définir la couleur et l’apparence des éléments de l’interface utilisateur, comme les contrôles de dialogue courants. |
Vous disposez d’une interface utilisateur personnalisée que vous souhaitez être cohérente avec l’environnement VS global et vous disposez d’éléments d’interface utilisateur qui correspondent à la catégorie et à la signification sémantique des jetons partagés. | Couleurs partagées communes | Noms de jetons de couleur prédéfinis existants pour des éléments d’interface utilisateur spécifiques |
Vous disposez d’une fonctionnalité individuelle ou d’un groupe de fonctionnalités et il n’existe aucune couleur partagée pour des éléments similaires. | Couleurs personnalisées | Noms de jetons de couleur spécifiques à une zone et non destinés à être partagés avec d’autres interfaces utilisateur |
Vous souhaitez autoriser l’utilisateur final à personnaliser l’interface utilisateur ou le contenu (par exemple, pour les éditeurs de texte ou les fenêtres du concepteur spécialisé). | Personnalisation de l’utilisateur final (Outils > Boîte de dialogue Options) |
Paramètres défini dans la page « Polices et couleurs » du Boîte de dialogue Options des outils > ou page spécialisée spécifique à une fonctionnalité d’interface utilisateur. |
Thèmes Visual Studio
Visual Studio propose trois thèmes de couleurs différents : clair, foncé et bleu. Il détecte également le mode Contraste élevé, qui est un thème de couleur à l’échelle du système conçu pour l’accessibilité.
Les utilisateurs sont invités à sélectionner un thème lors de leur première utilisation de Visual Studio et sont en mesure de changer de thème ultérieurement en accédant à l’environnement > d’options > outils > général et en choisissant un nouveau thème dans le menu déroulant « thème de couleur ».
Les utilisateurs peuvent également utiliser Panneau de configuration pour basculer leurs systèmes entiers en un des thèmes à contraste élevé. Si un utilisateur sélectionne un thème à contraste élevé, le sélecteur de thème de couleur Visual Studio n’affecte plus les couleurs dans Visual Studio, bien que les modifications de thème soient enregistrées lorsque l’utilisateur quitte le mode Contraste élevé. Pour plus d’informations sur le mode Contraste élevé, consultez Choix des couleurs contraste élevé.
Service VSColor
Visual Studio fournit un service de couleur d’environnement, appelé service VSColor, qui vous permet de lier les valeurs de couleur de vos éléments d’interface utilisateur à une entrée nommée contenant des valeurs de couleur pour chaque thème Visual Studio. Cela garantit que vos couleurs changeront automatiquement pour refléter le thème sélectionné par l’utilisateur actuel ou le mode contraste élevé système. L’utilisation du service signifie que l’implémentation de toutes les modifications de couleur liées au thème est gérée à un seul endroit et si vous utilisez des couleurs partagées communes à partir du service, votre interface utilisateur reflète automatiquement les nouveaux thèmes dans les futures versions de Visual Studio.
Implémentation
Le code source Visual Studio inclut plusieurs fichiers de définition de package qui contiennent des listes de noms de jetons et les valeurs de couleur respectives pour chaque thème. Le service de couleurs lit les VSColors définis dans ces fichiers de définition de package. Ces couleurs sont référencées dans le balisage XAML ou dans le code, puis chargées par le biais de la IVsUIShell5.GetThemedColor
méthode ou d’un mappage DynamicResource.
Couleurs système
Les contrôles courants référencent les couleurs système par défaut. Si vous souhaitez que votre interface utilisateur utilise des couleurs système, comme lorsque vous créez une boîte de dialogue incorporée ou autonome, vous n’avez rien à faire.
Couleurs partagées communes dans le service VSColor
Vos éléments d’interface doivent refléter l’environnement Visual Studio global. En réutilisant les couleurs partagées communes appropriées pour le composant d’interface utilisateur que vous concevez, vous vérifiez que votre interface est cohérente avec d’autres interfaces Visual Studio et que vos couleurs seront mises à jour automatiquement lorsque des thèmes sont ajoutés ou mis à jour.
Avant d’utiliser des couleurs partagées communes, assurez-vous que vous comprenez comment les utiliser correctement. Une utilisation incorrecte des couleurs partagées courantes peut entraîner une expérience incohérente, frustrante ou déroutante pour vos utilisateurs.
Couleurs personnalisables par l’utilisateur
Voir : Exposition des couleurs pour les utilisateurs finaux
Parfois, vous souhaiterez autoriser l’utilisateur final à personnaliser votre interface utilisateur, comme lorsque vous créez un éditeur de code ou une aire de conception. Les composants d’interface utilisateur personnalisables se trouvent dans la section Polices et couleurs de la boîte de dialogue Options des outils>, où les utilisateurs peuvent choisir de modifier la couleur de premier plan, la couleur d’arrière-plan ou les deux.
Boîte de dialogue Options des outils >
The VSColor Service
Visual Studio fournit un service de couleur d’environnement, également appelé service VSColor ou service de couleur de l’interpréteur de commandes. Ce service vous permet de lier les valeurs de couleur de vos éléments d’interface utilisateur à un jeu de couleurs nom-valeur contenant des couleurs pour chaque thème. Le service VSColor doit être utilisé pour tous les éléments de l’interface utilisateur, afin que les couleurs changent automatiquement pour refléter le thème sélectionné par l’utilisateur actuel et que l’interface utilisateur liée au service de couleur d’environnement s’intègre à de nouveaux thèmes dans les futures versions de Visual Studio.
Fonctionnement du service
Le service de couleur d’environnement lit VSColors défini dans .pkgdef pour le composant d’interface utilisateur. Ces VSColors sont ensuite référencés dans le balisage XAML ou le code et sont chargés via le mappage ou DynamicResource
le IVsUIShell5.GetThemedColor
mappage.
Architecture de service de couleur d'environnement
Accès au service
Il existe plusieurs façons d’accéder au service VSColor, en fonction du type de jetons de couleur que vous utilisez et du type de code que vous avez.
Couleurs d’environnement prédéfinies
À partir du code natif
L’interpréteur de commandes fournit un service qui donne accès aux COLORREF
couleurs. Le service/interface est :
IVsUIShell2::GetVSSysColorEx(VSSYSCOLOR dwSysColIndex, DWORD *pdwRGBval)
Dans le fichier VSShell80.idl, l’énumération __VSSYSCOLOREX
a des constantes de couleur d’interpréteur de commandes. Pour l’utiliser, transmettez comme valeur d’index l’une des valeurs du enum __VSSYSCOLOREX
documenté dans MSDN ou un numéro d’index standard que l’API système Windows accepte GetSysColor
. Cette opération renvoie la valeur RVB de la couleur qui doit être utilisée dans le deuxième paramètre.
Si vous stockez un stylet ou un pinceau avec une nouvelle couleur, vous devez AdviseBroadcastMessages
(hors de l’interpréteur de commandes Visual Studio) et écouter et WM_THEMECHANGED
les WM_SYSCOLORCHANGE
messages.
Pour accéder au service de couleur dans le code natif, vous allez effectuer un appel semblable à ceci :
pUIShell2->GetVSSysColorEx(VSCOLOR_COLOR_NAME, &rgbLOCAL_COLOR);
Remarque
Les COLORREF
valeurs retournées par GetVSSysColorEx()
contiennent uniquement les composants R,G,B d’une couleur de thème. Si une entrée de thème utilise la transparence, la valeur du canal alpha est dis carte ed avant de retourner. Par conséquent, si la couleur de l’environnement d’intérêt doit être utilisée dans un endroit où le canal de transparence est important, vous devez utiliser IVsUIShell5.GetThemedColor
au lieu de IVsUIShell2::GetVSSysColorEx
, comme décrit plus loin dans cette rubrique.
À partir du code managé
L’accès au service VSColor via du code natif est assez simple. Toutefois, si vous utilisez du code managé, déterminer comment utiliser le service peut être difficile. Dans cet esprit, voici un extrait de code C# illustrant ce processus :
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 vous travaillez dans Visual Basic, utilisez :
Dim myColor As Color = ColorTranslator.FromWin32((Integer)win32Color)
À partir de l’interface utilisateur WPF
Vous pouvez lier des couleurs Visual Studio par le biais de valeurs exportées dans l’application ResourceDictionary
. Vous trouverez ci-dessous un exemple d’utilisation de ressources de la table de couleurs, ainsi que de la liaison aux données de police d’environnement 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>
Classes et méthodes d’assistance pour le code managé
Pour le code managé, la bibliothèque Managed Package Framework (Microsoft.VisualStudio.Shell.12.0.dll
) de l’interpréteur de commandes contient quelques classes d’assistance qui facilitent l’utilisation de couleurs thématiques.
Les méthodes d’assistance de la Microsoft.VisualStudio.Shell.VsColors
classe dans MPF incluent GetThemedGDIColor()
et GetThemedWPFColor()
. Ces méthodes d’assistance retournent la valeur de couleur d’une entrée de thème en tant que System.Drawing.Color
ou System.Windows.Media.Color
, à utiliser dans l’interface utilisateur WinForms ou 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 classe peut également être utilisée pour obtenir des identificateurs VSCOLOR pour une clé de ressource de couleur WPF donnée, ou inversement.
public static string GetColorBaseKey(int vsSysColor);
public static bool TryGetColorIDFromBaseKey(string baseKey, out int vsSysColor);
Les méthodes de VsColors
classe interrogent le service VSColor pour retourner la valeur de couleur chaque fois qu’elles sont appelées. Pour obtenir une valeur de couleur en tant que System.Drawing.Color
, une alternative avec de meilleures performances consiste à utiliser plutôt les méthodes de la Microsoft.VisualStudio.PlatformUI.VSColorTheme
classe, qui met en cache les valeurs de couleur obtenues à partir du service VSColor. La classe s’abonne en interne aux événements de diffusion de messages d’interpréteur de commandes et dis carte la valeur mise en cache lorsqu’un événement de modification de thème se produit. En outre, la classe fournit un . Événement convivial NET pour s’abonner aux modifications de thème. Utilisez l’événement ThemeChanged
pour ajouter un nouveau gestionnaire et utilisez la GetThemedColor()
méthode pour obtenir des valeurs de couleur pour l’intérêt ThemeResourceKeys
. Un exemple de code peut ressembler à ceci :
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);}
}
Choix des couleurs à contraste élevé
Windows utilise plusieurs thèmes de niveau système à contraste élevé qui augmentent le contraste de couleur du texte, des arrière-plans et des images, rendant les éléments plus distincts à l’écran. Pour des raisons d’accessibilité, il est important que les éléments d’interface Visual Studio répondent correctement lorsque les utilisateurs basculent vers un thème à contraste élevé.
Seules quelques couleurs système peuvent être utilisées pour les thèmes à contraste élevé. Lorsque vous choisissez vos noms de couleurs système, n’oubliez pas les conseils suivants :
Choisissez les couleurs système qui ont la même signification sémantique que l’élément que vous colorisez. Par exemple, si vous choisissez une couleur à contraste élevé pour le texte dans une fenêtre, utilisez WindowText et non ControlText.
Choisissez des paires de premier plan/arrière-plan ensemble ou vous ne serez pas certain que votre choix de couleur fonctionnera dans tous les thèmes à contraste élevé.
Déterminez les parties de votre interface utilisateur les plus importantes et assurez-vous que les zones de contenu se distinguent. Vous perdrez beaucoup de détails que les différences subtiles de teinte de couleur distingueraient normalement, de sorte que l’utilisation de couleurs de bordure forte est commune pour définir des zones de contenu, car il n’existe aucune variante de couleur pour différentes zones de contenu.
Jeu de couleurs système
Le tableau du blog de l’équipe WPF : SystemColors Reference indique l’ensemble complet de noms de couleurs système et les teintes correspondantes affichées dans chaque thème.
Lorsque vous appliquez cet ensemble limité de couleurs à votre interface utilisateur, il est prévu que vous perdiez des détails subtils qui étaient présents dans les thèmes « normaux ». Voici un exemple d’interface utilisateur avec des couleurs grises subtiles utilisées pour distinguer les zones d’une fenêtre outil. Lorsqu’elles sont associées à la même fenêtre affichée en mode Contraste élevé, vous pouvez voir que tous les arrière-plans sont la même teinte et que les bordures de ces zones sont indiquées par bordure seule :
Exemple de la façon dont les détails subtils sont perdus en contraste élevé
Choix des couleurs de texte dans un éditeur
Le texte colorisé est utilisé dans un éditeur ou sur une surface de conception pour indiquer une signification, comme permettre une identification facile des groupes d’éléments similaires. Toutefois, dans un thème à contraste élevé, vous n’avez pas la possibilité de faire la distinction entre plus de trois couleurs de texte. WindowText, GrayText et HotTrackText sont les seules couleurs disponibles sur les surfaces WindowBackground. Étant donné que vous ne pouvez pas utiliser plus de trois couleurs, choisissez soigneusement les différences les plus importantes que vous souhaitez afficher en mode Contraste élevé.
Hues pour chacun des noms de jetons autorisés sur une surface d’éditeur, car ils apparaissent dans chaque thème à contraste élevé :
Comparaison de l'éditeur de contraste élevé
Exemples de l’aire de l’éditeur dans le thème Bleu :
Éditeur dans le thème bleu
Éditeur dans le thème Contraste élevé #1
Modèles d’usage
De nombreux éléments d’interface utilisateur courants ont déjà des couleurs contraste élevé définies. Vous pouvez référencer ces modèles d’utilisation lors du choix de vos propres noms de couleurs système afin que vos éléments d’interface utilisateur soient cohérents avec des composants similaires.
Couleur système | Utilisation |
---|---|
ActiveCaption | - Glyphes du bouton de fenêtre actif et de l’IDE actif sur le pointage et appuyez sur - Arrière-plan de la barre de titre pour les fenêtres IDE et rafrées - Arrière-plan de la barre d’état par défaut |
ActiveCaptionText | - Ide actif et fenêtres rafrées pour le premier plan de la barre de titre (texte et glyphes) - Arrière-plan et bordure des boutons de fenêtre actif sur le pointage et appuyez sur |
Control | - Zone de liste déroulante, liste déroulante et contrôle de recherche par défaut et arrière-plan désactivé, y compris le bouton déroulant - Arrière-plan du bouton cible d’ancrage - Arrière-plan de la barre de commandes - Arrière-plan de la fenêtre Outil |
ControlDark | - Arrière-plan de l’IDE - Séparateurs de barre de commandes et de menu - Bordure de la barre de commandes - Ombres de menu - Onglet fenêtre Outil par défaut, bordure et séparateur de pointage - Arrière-plan du bouton De dépassement de capacité du document - Bordure du glyphe cible d’ancrage |
ControlDarkDark | - Fenêtre d’onglet de document non centré et sélectionnée |
ControlLight | - Masquer automatiquement la bordure de l’onglet - Zone de liste déroulante et bordure de liste déroulante - Arrière-plan et bordure de la cible d’ancrage |
ControlLightLight | - Bordure provisoire sélectionnée et prioritaire |
ControlText | - Zone de liste déroulante et glyphe de liste déroulante - Texte de l’onglet non sélectionné dans la fenêtre Outil |
GrayText | - Zone de liste déroulante et liste déroulante désactivée bordure, glyphe déroulant, texte et texte de l’élément de menu - Texte du menu désactivé - Texte d’en-tête du contrôle de recherche « options de recherche » - Séparateur de section de contrôle de recherche |
Point clé | - Tous les arrière-plans et bordures appuyés, à l’exception de l’arrière-plan du bouton déroulant de zone de liste déroulante et de la bordure du bouton de dépassement de capacité du document - Arrière-plan de l’élément sélectionné |
HighlightText | - Tous les pointages et les premier plan enfoncés (texte et glyphes) - Fenêtre d’outil prioritaire et contrôle de fenêtre onglet de document au premier plan - Bordure de la barre de titre de la fenêtre Outil prioritaire - Focus, sélectionné tabulation provisoire au premier plan - Bordure du bouton de dépassement de capacité du document sur le pointage et appuyez sur - Bordure de l’icône sélectionnée |
HotTrack | - Arrière-plan de la barre de défilement et bordure sur appuyer sur - Glyphe de flèche de barre de défilement sur appuyez sur |
InactiveCaption | - Glyphes du bouton de fenêtre inactif et de l’IDE inactif sur le pointage - Arrière-plan de la barre de titre pour les fenêtres IDE et rafrées - Arrière-plan du contrôle de recherche désactivé |
InactiveCaptionText | - IDE inactif et barre de titre des fenêtres raflé au premier plan (texte et glyphes) - Boutons de fenêtre inactifs en arrière-plan et bordure sur le pointage - Arrière-plan et bordure de la fenêtre d’outil sans focus - Contrôle de recherche désactivé au premier plan |
Menu | - Arrière-plan du menu déroulant - Activé et désactivé case activée marquer l’arrière-plan |
MenuText | - Bordure du menu déroulant - Coches - Glyphes de menu - Texte du menu déroulant - Bordure de l’icône sélectionnée |
Scrollbar | - Barre de défilement et arrière-plan de la barre de défilement, tous les états |
Fenêtre | - Arrière-plan de l’onglet Masquer automatiquement - Barre de menus et arrière-plan de l’étagère de commandes - Arrière-plan de l’onglet fenêtre de document non sélectionnée ou non sélectionnée, pour les onglets ouverts et provisoires - Arrière-plan de la barre de titre de la fenêtre outil sans focus - Arrière-plan de l’onglet Fenêtre Outil, sélectionné et non sélectionné |
WindowFrame | - Bordure IDE |
WindowText | - Masquer automatiquement le premier plan de l’onglet - Onglet de la fenêtre outil sélectionnée au premier plan - Onglet fenêtre de document non centré et onglet provisoire non centré ou non sélectionné au premier plan - Arborescence par défaut au premier plan et pointage sur le glyphe non sélectionné - Bordure d’onglet sélectionnée de la fenêtre Outil - Arrière-plan de la barre de défilement, bordure et glyphe |
Exposition de couleurs pour les utilisateurs finaux
Vous pouvez parfois autoriser l’utilisateur final à personnaliser votre interface utilisateur, comme lorsque vous créez un éditeur de code ou une surface de conception. La méthode la plus courante consiste à utiliser la boîte de dialogue Options des outils>. Sauf si vous avez une interface utilisateur hautement spécialisée qui nécessite des contrôles spéciaux, le moyen le plus simple de présenter la personnalisation consiste à utiliser la page Polices et couleurs dans la section Environnement de la boîte de dialogue. Pour chaque élément que vous exposez pour la personnalisation, l’utilisateur peut choisir de modifier la couleur de premier plan, la couleur d’arrière-plan ou les deux.
Création d’un VSPackage pour vos couleurs personnalisables
Un VSPackage peut contrôler les polices et les couleurs via des catégories personnalisées et afficher des éléments dans la page de propriétés Polices et Couleurs. Lorsque vous utilisez ce mécanisme, les VSPackages doivent implémenter l’interface IVsFontAndColorDefaultsProvider et ses interfaces associées.
En principe, ce mécanisme peut être utilisé pour modifier tous les éléments d’affichage existants et les catégories qui les contiennent. Toutefois, il ne doit pas être utilisé pour modifier la catégorie éditeur de texte ou ses éléments d’affichage. Pour plus d’informations sur la catégorie Éditeur de texte, consultez La vue d’ensemble de la police et de la couleur.
Pour implémenter des catégories personnalisées ou afficher des éléments, un VSPackage doit :
Créez ou identifiez des catégories dans le Registre. L’implémentation de l’IDE de la page de propriétés Polices et Couleurs utilise ces informations pour interroger correctement le service prenant en charge une catégorie donnée.
Créez ou identifiez des groupes dans le Registre (facultatif). Il peut être utile de définir un groupe, qui représente l’union de deux catégories ou plus. Si un groupe est défini, l’IDE fusionne automatiquement les sous-catégories et distribue les éléments d’affichage au sein du groupe.
Implémenter la prise en charge de l’IDE.
Gérer les modifications de police et de couleur.
Pour créer ou identifier des catégories
Construisez un type spécial d’entrée de Registre de catégories sous [HKLM\SOFTWARE\Microsoft \Visual Studio\\<Visual Studio version\>\FontAndColors\\<Category\>]
lequel <Category>
est le nom non localisé de la catégorie.
Remplissez le Registre avec deux valeurs :
Nom | Type | Données | Description |
---|---|---|---|
Catégorie | REG_SZ | GUID | GUID créé pour identifier la catégorie |
Package | REG_SZ | GUID | GUID du service VSPackage qui prend en charge la catégorie |
Le service spécifié dans le Registre doit fournir une implémentation d’IVsFontAndColorDefaults pour la catégorie correspondante.
Pour créer ou identifier des groupes
Construisez un type spécial d’entrée de Registre de catégories sous [HKLM\SOFTWARE\Microsoft \Visual Studio\\<Visual Studio version\>\FontAndColors\\<group\>]
lequel <group>
est le nom non localisé du groupe.
Remplissez le Registre avec deux valeurs :
Nom | Type | Données | Description |
---|---|---|---|
Catégorie | REG_SZ | GUID | GUID créé pour identifier la catégorie |
Package | REG_SZ | GUID | GUID du service VSPackage qui prend en charge la catégorie |
Le service spécifié dans le Registre doit fournir une implémentation du IVsFontAndColorGroup groupe correspondant.
Implémentation de IVsFontAndColorGroup
Pour implémenter la prise en charge de l’IDE
Implémentez GetObject, qui retourne une interface IVsFontAndColorDefaults ou une IVsFontAndColorGroup interface à l’IDE pour chaque GUID de catégorie ou de groupe fourni.
Pour chaque catégorie prise en charge, un VSPackage implémente une instance distincte de l’interface IVsFontAndColorDefaults .
Les méthodes implémentées via IVsFontAndColorDefaults doivent fournir l’IDE avec :
Listes d’éléments d’affichage dans la catégorie
Noms localisables pour les éléments d’affichage
Afficher des informations pour chaque membre de la catégorie
Remarque
Chaque catégorie doit contenir au moins un élément d’affichage.
L’IDE utilise l’interface IVsFontAndColorGroup pour définir une union de plusieurs catégories.
Son implémentation fournit à l’IDE les éléments suivants :
Liste des catégories qui composent un groupe donné
Accès aux instances d’IVsFontAndColorDefaults prenant en charge chaque catégorie au sein du groupe
Noms de groupes localisables
Mise à jour de l’IDE
L’IDE met en cache des informations sur les paramètres Police et Couleur. Par conséquent, après toute modification de la configuration de police et de couleur de l’IDE, vous assurer que le cache est à jour est une bonne pratique.
La mise à jour du cache s’effectue via l’interface IvsFontAndColorCacheManager et peut être effectuée globalement ou simplement sur les éléments sélectionnés.
Gestion des modifications de police et de couleur
Pour prendre en charge correctement la colorisation du texte affiché par un VSPackage, le service de colorisation prenant en charge VSPackage doit répondre aux modifications initiées par l’utilisateur via la page des propriétés Polices et Couleurs.
Pour ce faire, un VSPackage doit :
gérez les événements générés par l’IDE en implémentant l’interface IVsFontAndColorEvents . L’IDE appelle la méthode appropriée en suivant les modifications utilisateur de la page Polices et Couleurs. Par exemple, elle appelle la méthode OnFontChanged si une nouvelle police est sélectionnée.
OU
interrogez l’IDE pour les modifications. Cela peut être effectué via l’interface IVsFontAndColor Stockage implémentée par le système. Bien que principalement pour la prise en charge de la persistance, la méthode GetItem peut obtenir des informations de police et de couleur pour les éléments d’affichage. Pour plus d’informations sur les paramètres de police et de couleur, consultez l’article MSDN sur l’accès à la police stockée et à la couleur Paramètres.
Remarque
Pour vous assurer que les résultats d’interrogation sont corrects, utilisez l’interface IVsFontAndColorCacheManager pour déterminer si un vidage et une mise à jour du cache sont nécessaires avant d’appeler les méthodes de récupération de l’interface IVsFontAndColor Stockage.
Inscription d’une police personnalisée et d’une catégorie de couleur sans implémenter d’interfaces
L’exemple de code suivant montre comment inscrire la police et la catégorie de couleur personnalisées sans implémenter d’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
Pour cet exemple de code :
"NameID"
= ID de ressource du nom de catégorie localisé dans votre package"ToolWindowPackage"
= GUID du package"Category"="{9FF46859-A47E-47bf-8AC5-EC3DBE69D1FE}"
n’est qu’un exemple et la valeur réelle peut être un nouveau GUID fourni par l’implémenteur.
Définir le GUID de la catégorie de propriétés Police et Couleur
L’exemple de code ci-dessous illustre la définition des GUID de catégorie.
// 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);
}
}