5

私が作成した Visual Studio 拡張機能では、Visual Studio エディター内でメソッド呼び出しを強調表示する必要があります。例えば:

ここに画像の説明を入力

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実行時に新しいコンテンツ タイプと分類を作成できます。用の同様の API はありますかEditorFormatDefinitions

EditorFormatDefinitionまたは、 Visual Studio 内でMEF を動的にエクスポートすることは可能ですか?

4

1 に答える 1

7

解決策は、 を使用し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 に感謝します。

于 2014-09-18T19:33:58.610 に答える