Change text color for Selected Text in Visual Studio

Lance Roberts picture Lance Roberts · Jul 4, 2012 · Viewed 19.3k times · Source

Possible Duplicate:
I can't edit selected text foreground color in Visual Studio 2010. Anyone know how to do this?

In the Options->Environment->Fonts and Colors dialog you can choose Selected Text in the Display Items listbox, but this only allows you to change the Item background property.

How does one change the text color, so that for example I can have white text on a blue background when I select an item? Also, is there a way to bold the text (the Bold box is disabled also).

Note: Here is the question that asks about the background color change.

Answer

asavage picture asavage · Jul 14, 2012

The foreground color in the VS2010 editor is not set in one place but in many within the Options Form. If you have Resharper installed it also sets some foreground properties. The reason VS2010 does this is to allow individual items (words) within the foreground to express different colors depending on their type (e.g. comments, value types, enums etc.) even when they are selected. In other words VS2010 applies a priority to the foreground color for these specific types over the generic selected text color format.

For instance, when you look at the Fonts and Colors dialog you will notice the entry for User Types. On my VS2010 its RGB value is RGB(43, 145, 175) which looks like teal. If I change that color to Red, the User Types on my editor's foreground color changes to Red and remains Red even when with the selection area.

In some instances VS2010 will override the foreground color such as applying a breakpoint to a line. On my VS2010 enabled breakpoints when in editing mode have a white foreground color, regardless of the terms in the line.

To answer your question of how one would change the foreground color for all selected text, VS2010 does not support this out of the box.

I wrote a VS2010 Extension as outlined here. I used the example code as is and added the lines:

        selectedText[EditorFormatDefinition.ForegroundBrushId] = Brushes.Green;
        formatMap.SetProperties("Selected Text", selectedText);

...but this did not change the foreground color of selected text to green. It stayed black. This is probably due to the VS2010 WPF editor using a Priority Order for each format and one or more other formats overriding the selected text foreground color.