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

本文关键字:颜色 Visual Studio 分类器 扩展 | 更新日期: 2023-09-27 18:03:10

我正在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);
    }
}

到目前为止我发现了什么:

    这个问题假定我的问题已经得到了回答。
  • 这个答案显示了在注册表中可以存储颜色的位置,但这不是一个可靠的解决方案。这个问题是关于WPF的颜色(不是我的情况)
  • 有可扩展性工具扩展与主题色板显示的颜色从环境颜色,但我不知道如何使用c#代码它提供

如果可能的话,我想使用用于'关键字','字符串'和'评论'颜色的颜色,可以在Tools -> Options -> Environment -> Fonts and Colors的VS中找到,再次,按照当前的主题。

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

基于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

颜色