C# 将自定义颜色定义添加到Visual Studio扩展中的输出窗口

C# 将自定义颜色定义添加到Visual Studio扩展中的输出窗口,c#,visual-studio-2010,C#,Visual Studio 2010,使用扩展将自定义颜色定义添加到“字体和颜色”对话框的“文本编辑器”类别中相当容易。通常只定义和导出一个新的分类类型和编辑器定义,并用UserVisible(true)属性对其进行修饰。这里有一个例子 public static class OutputClassificationDefinitions { [Export] [Name("SomeName")] public static readonly ClassificationTypeDefinition Buil

使用扩展将自定义颜色定义添加到“字体和颜色”对话框的“文本编辑器”类别中相当容易。通常只定义和导出一个新的分类类型和编辑器定义,并用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”显示在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对话框的“输出窗口”类别中,更重要的是,让更改更新输出窗口吗?

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

有关进一步讨论,请参阅。