在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中找到,再次,按照当前的主题。
基于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
颜色和