4

Visual Studio 확장 프로그램에서 Visual Studio 편집기 내에서 메서드 호출을 강조해야합니다. 예를 들어 :런타임에 사용자 정의 EditorFormatDefinition 내보내기

enter image description here

나는 독특한 호출의 수에 따라 색상 스펙트럼을 분할하는 HSV 색상을 사용하고 싶습니다.

[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; 
    } 
} 

그러나,이 수동으로 내가 미리 사용하고자하는 모든 색상을 설정하라고 요구한다 : 나는 자신의 EditorFormatDefinition 각 색상을 내보낼 경우

나는 강조 표시를 달성 할 수있다. 런타임에 EditorFormatDefinitions을 내보내는 방법이 있습니까?

IContentTypeRegistryService 및 IClassificationTypeRegistryService과 같은 특정 레지스트리는 런타임에 새로운 콘텐츠 형식 및 분류를 만들 수 있도록합니다. 유사한 API가 EditorFormatDefinitions에 존재합니다.

또는 Visual Studio 내에서 EditorFormatDefinition을 동적으로 MEF로 내보낼 수 있습니까?

답변

4

해결 방법은 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에게 감사드립니다.

+0

런타임시 주문을 변경할 수 있습니까? OrderAttribute가 제공하는 기능을 의미합니다. – TDenis

+0

IClassificationFormatMap.AddExplicitTextProperties (IClassificationType, TextFormattingRunProperties, IClassificationType) 우선 순위를 설정할 수있는이 두 번째 오버로드를 발견했습니다. – cyanbeam