在Visual Studio分类器扩展中获取主题颜色

时间:2016-08-20 11:38:12

标签: c# visual-studio plugins syntax-highlighting vsix

我在Visual Studio中构建了一个突出显示Properties language扩展名的语法,并且已经构建了分类器/标记器。 然而,我设置/选择不同标签的正确颜色(即键,值,注释)。

我想让颜色遵循Visual Studio的当前主题。现在他们已经进行了硬编码(请参阅{{1 }}):

ForegroundColor = ...

到目前为止我发现了:

如果可能,我想使用用于' Keyword',' String'和' Comment'可以在[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中找到的颜色,再次,根据当前主题。

1 个答案:

答案 0 :(得分: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 Colors