gpt4 book ai didi

c# - 在运行时导出自定义 EditorFormatDefinition

转载 作者:太空狗 更新时间:2023-10-29 23:07:13 25 4
gpt4 key购买 nike

在我构建的 Visual Studio 扩展中,我需要在 Visual Studio 编辑器中突出显示方法调用。例如:

enter image description here

我想使用 HSV 颜色根据唯一调用的数量来划分色谱。

如果我将每种颜色导出为它自己的 EditorFormatDefinition,我可以实现突出显示:

[Export(typeof(EditorFormatDefinition))]
[ClassificationType(ClassificationTypeNames = "red-background")]
[Name("red-background")]
[UserVisible(true)]
[Order(After = Priority.High)]
public sealed class RedBackground : ClassificationFormatDefinition
{
public RedBackground()
{
DisplayName = "red-background";
BackgroundColor = Colors.Red;
}
}

但是,这需要我提前手动设置我想使用的所有颜色。有没有办法在运行时导出 EditorFormatDefinitions

IContentTypeRegistryService 和 IClassificationTypeRegistryService 等某些注册表允许在运行时创建新的内容类型和分类。 EditorFormatDefinitions 是否存在类似的 API。

或者,是否可以在 Visual Studio 中动态导出 MEF EditorFormatDefinition

最佳答案

解决方案是使用 IClassificationFormatMapService请求特定的 IClassificationFormatMap .然后我们可以请求 TextFormattingRunProperties并创建一组新的文本格式属性,我们可以将其添加到 IClassificationFormatMap

//No reason to use identifier, just a default starting point that works for me.
var identiferClassificationType = registryService.GetClassificationType("identifier");
var classificationType = registryService.CreateClassificationType(name, SpecializedCollections.SingletonEnumerable(identiferClassificationType));
var classificationFormatMap = ClassificationFormatMapService.GetClassificationFormatMap(category: "text");
var identifierProperties = classificationFormatMap
.GetExplicitTextProperties(identiferClassificationType);

//Now modify the properties
var color = System.Windows.Media.Colors.Yellow;
var newProperties = identifierProperties.SetForeground(color);
classificationFormatMap.AddExplicitTextProperties(classificationType, newProperties);

//Now you can use or return classificationType...

感谢 Kevin Pilch-Bisson 在这方面的帮助。

关于c# - 在运行时导出自定义 EditorFormatDefinition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25860706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com