在Visual Studio扩展的输出窗口中添加自定义颜色定义

本文关键字:添加 自定义 颜色 定义 窗口 输出 Visual Studio 扩展 | 更新日期: 2023-09-27 18:16:00

使用扩展将自定义颜色定义添加到字体和颜色对话框的"文本编辑器"类别中是相当容易的。通常只是定义和导出一个新的分类类型和编辑器定义,并用UserVisible(true)属性对其进行装饰。下面是一个例子。

public static class OutputClassificationDefinitions
{
    [Export]
    [Name("SomeName")]
    public static readonly ClassificationTypeDefinition BuildHeaderDefinition;
    [Name("SomeName")]
    [UserVisible(true)]
    [Export(typeof(EditorFormatDefinition))]
    [ClassificationType(ClassificationTypeNames = "SomeName")]
    public sealed class BuildHeaderFormat : ClassificationFormatDefinition
    {
        public BuildHeaderFormat()
        {
            ForegroundColor = Properties.Settings.Default.BuildHeaderForerground;
            BackgroundColor = Properties.Settings.Default.BuildHeaderBackground;
        }
    }

"SomeName"出现在"Text Editor"类别下的F&C对话框中。如果用户改变了"SomeName"的颜色,它会被记住,编辑器的格式映射会更新为使用新颜色。

我想对输出窗口做类似的事情。您可以为输出窗口编写一个分类器,它工作得很好。我从StackOverflow上的另一篇文章中得到了这个想法,它工作得非常出色。

但是,新的颜色定义显示在"文本编辑器"类别中,而不是输出窗口类别中,这是首选的。更令人恼火的是,用户的颜色更改不会更新输出窗口的formatMap,这意味着新的颜色不会生效。

我已经尝试更新formatMap自己如下:

[Import]
internal IClassificationFormatMapService ClassificationFormatMapService;
var formatMap = ClassificationFormatMapService.GetClassificationFormatMap(FontsAndColorsCategory.Outputwindow);
var type = ClassificationRegistry.GetClassificationType("SomeName");
formatMap.AddExplicitTextProperties(type, formatMap.GetExplicitTextProperties(type));

这行不通。不引发异常或错误,只是不做任何事情。

是否可以将我的自定义添加到F&C对话框的"输出窗口"类别,更重要的是,是否有更改更新输出窗口?

在Visual Studio扩展的输出窗口中添加自定义颜色定义

好吧,答案似乎是你不能做我想做的事,根据微软。我不完全相信,但这里提出的论点是令人信服的。