Share via


チュートリアル: テキスト ビューのカスタマイズ

テキスト ビューをカスタマイズするには、次の任意のプロパティをエディター書式マップで変更します。

  • インジケーター マージン

  • 挿入キャレット

  • 上書きキャレット

  • 選択されたテキスト

  • 非アクティブの選択されたテキスト (フォーカスが失われたテキスト)

  • 可視空白

MEF プロジェクトを作成する

  1. C# VSIX プロジェクトを作成します。 ([新しいプロジェクト] ダイアログで、[Visual C#]、[拡張機能][VSIX プロジェクト] の順に選択します。) ソリューションに ViewPropertyTest という名前を付けます。

  2. プロジェクトに、[エディター分類子] 項目テンプレートを追加します。 詳細については、「エディター項目テンプレートを使用して拡張機能を作成する」を参照してください。

  3. 既存のクラス ファイルを削除します。

コンテンツ タイプを定義する

  1. クラス ファイルを追加し、その名前を ViewPropertyModifierにします。

  2. 次の using ディレクティブを追加します。

    using System;
    using System.Collections;
    using System.Windows;
    using System.Windows.Media;
    using System.ComponentModel.Composition;
    using Microsoft.VisualStudio.Text.Classification;
    using Microsoft.VisualStudio.Text.Editor;
    using Microsoft.VisualStudio.Utilities;
    
  3. IWpfTextViewCreationListener から継承する TestViewCreationListener というクラスを宣言します。 次の属性を使って、このクラスをエクスポートします。

    • ContentTypeAttribute: このリスナーが適用されるコンテンツの種類を指定します。

    • TextViewRoleAttribute: このリスナーのロールを指定します。

      [Export(typeof(IWpfTextViewCreationListener))]
      [ContentType("text")]
      [TextViewRole(PredefinedTextViewRoles.Document)]
      internal class TestViewCreationListener : IWpfTextViewCreationListener
      

  4. このクラスで、IEditorFormatMapService をインポートします。

    [Import]
    internal IEditorFormatMapService FormatMapService = null;
    

ビューのプロパティを変更する

  1. ビューを開いたときにビューのプロパティが変更されるように、TextViewCreated メソッドを設定します。 この変更を行うには、まず、目的のビュー特性に対応する ResourceDictionary を探します。 次に、リソース ディクショナリで適切なプロパティを変更し、プロパティを設定します。 プロパティを設定する前に BeginBatchUpdate メソッドを呼び出し、プロパティを設定した後に EndBatchUpdate を呼び出すことで、SetProperties メソッドへの呼び出しをバッチ処理します。

    public void TextViewCreated(IWpfTextView textView)
    {
        IEditorFormatMap formatMap = FormatMapService.GetEditorFormatMap(textView);
    
        ResourceDictionary regularCaretProperties = formatMap.GetProperties("Caret");
        ResourceDictionary overwriteCaretProperties = formatMap.GetProperties("Overwrite Caret");
        ResourceDictionary indicatorMargin = formatMap.GetProperties("Indicator Margin");
        ResourceDictionary visibleWhitespace = formatMap.GetProperties("Visible Whitespace");
        ResourceDictionary selectedText = formatMap.GetProperties("Selected Text");
        ResourceDictionary inactiveSelectedText = formatMap.GetProperties("Inactive Selected Text");
    
        formatMap.BeginBatchUpdate();
    
        regularCaretProperties[EditorFormatDefinition.ForegroundBrushId] = Brushes.Magenta;
        formatMap.SetProperties("Caret", regularCaretProperties);
    
        overwriteCaretProperties[EditorFormatDefinition.ForegroundBrushId] = Brushes.Turquoise;
        formatMap.SetProperties("Overwrite Caret", overwriteCaretProperties);
    
        indicatorMargin[EditorFormatDefinition.BackgroundColorId] = Colors.LightGreen;
        formatMap.SetProperties("Indicator Margin", indicatorMargin);
    
        visibleWhitespace[EditorFormatDefinition.ForegroundColorId] = Colors.Red;
        formatMap.SetProperties("Visible Whitespace", visibleWhitespace);
    
        selectedText[EditorFormatDefinition.BackgroundBrushId] = Brushes.LightPink;
        formatMap.SetProperties("Selected Text", selectedText);
    
        inactiveSelectedText[EditorFormatDefinition.BackgroundBrushId] = Brushes.DeepPink;
        formatMap.SetProperties("Inactive Selected Text", inactiveSelectedText);
    
        formatMap.EndBatchUpdate();
    }
    

コードのビルドとテスト

  1. ソリューションをビルドします。

    デバッガーでこのプロジェクトを実行すると、Visual Studio の 2 つ目のインスタンスが起動されます。

  2. テキスト ファイルを作成し、いくつかのテキストを入力します。

    • 挿入キャレットはマゼンタ、上書きキャレットは水色になります。

    • インジケーター マージン (テキスト ビューの左側) は、薄い緑になります。

  3. 入力したテキストを選択します。 選択したテキストの色が、薄いピンクになります。

  4. テキストが選択された状態で、テキスト ウィンドウの外側の任意の場所をクリックします。 選択したテキストの色が、濃いピンクになります。

  5. 可視空白を有効にします ([編集] メニューの [詳細設定] をポイントし、[スペースの表示] をクリックします)。 テキストにいくつかのタブを入力します。 タブを表す赤い矢印が表示されます。