Получение цветов темы в расширении Visual Studio Classifier

c# visual-studio plugins syntax-highlighting vsix

310 просмотра

1 ответ

Я строю расширение подсветки синтаксиса для языка свойств в Visual Studio и уже построил классификатор / тегер. Однако я застрял в настройке / выборе правильных цветов для различных тегов (т.е. ключей, значений, комментариев).

Я бы хотел, чтобы цвета соответствовали текущей теме Visual Studio. Прямо сейчас они жестко запрограммированы (см. ForegroundColor = ...):

[Export(typeof(EditorFormatDefinition))]
[ClassificationType(ClassificationTypeNames = "PropertiesKeyTypeDefinition")]
[Name("PropertiesKeyFormat")]
[Order(Before = Priority.Default)]
internal sealed class PropertiesKey : ClassificationFormatDefinition {
    public PropertiesKey() {
        DisplayName = "Properties Key";
        ForegroundColor = Color.FromRgb(86, 156, 214);
    }
}

Что я нашел до сих пор:

Если возможно, я бы хотел использовать цвета, используемые для цветов « Ключевое слово », « Строка » и « Комментарий », которые также можно найти в VS Tools -> Options -> Environment -> Fonts and Colorsв соответствии с текущей темой.

Автор: clausavram Источник Размещён: 08.11.2019 11:15

Ответы (1)


1 плюс

Решение

На основе EnvironmentColors вы можете получить ThemeResourceKey.

Этот ключ может быть преобразован в SolidColorBrush с помощью этой функции:

private static SolidColorBrush ToBrush(ThemeResourceKey key)
{
    var color = VSColorTheme.GetThemedColor(key);
    return new SolidColorBrush(Color.FromArgb(color.A, color.R, color.G, color.B));
}

Так что назначение его на передний план становится:

[Export(typeof(EditorFormatDefinition))]
[ClassificationType(ClassificationTypeNames = "PropertiesKeyTypeDefinition")]
[Name("PropertiesKeyFormat")]
[Order(Before = Priority.Default)]
internal sealed class PropertiesKey : ClassificationFormatDefinition {
    public PropertiesKey() {
        DisplayName = "Properties Key";
        ForegroundColor = ToBrush(EnvironmentColors.ClassDesignerCommentTextColorKey);
    }
 }

Документация:

ThemeResouceKey

VSColorTheme.GetThemedColor

Дополнительно:

Это может быть полезно при выборе правильного ThemeResourceKey

VS Цвета

Автор: sboulema Размещён: 19.02.2019 10:58
Вопросы из категории :
32x32