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