チュートリアル: テキスト ビューのカスタマイズ
テキスト ビューをカスタマイズするには、次の任意のプロパティをエディター書式マップで変更します。
インジケーター マージン
挿入キャレット
上書きキャレット
選択されたテキスト
非アクティブの選択されたテキスト (フォーカスが失われたテキスト)
可視空白
MEF プロジェクトを作成する
C# VSIX プロジェクトを作成します。 ([新しいプロジェクト] ダイアログで、[Visual C#]、[拡張機能]、[VSIX プロジェクト] の順に選択します。) ソリューションに
ViewPropertyTest
という名前を付けます。プロジェクトに、[エディター分類子] 項目テンプレートを追加します。 詳細については、「エディター項目テンプレートを使用して拡張機能を作成する」を参照してください。
既存のクラス ファイルを削除します。
コンテンツ タイプを定義する
クラス ファイルを追加し、その名前を
ViewPropertyModifier
にします。次の
using
ディレクティブを追加します。IWpfTextViewCreationListener から継承する
TestViewCreationListener
というクラスを宣言します。 次の属性を使って、このクラスをエクスポートします。ContentTypeAttribute: このリスナーが適用されるコンテンツの種類を指定します。
TextViewRoleAttribute: このリスナーのロールを指定します。
このクラスで、IEditorFormatMapService をインポートします。
ビューのプロパティを変更する
ビューを開いたときにビューのプロパティが変更されるように、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(); }
コードのビルドとテスト
ソリューションをビルドします。
デバッガーでこのプロジェクトを実行すると、Visual Studio の 2 つ目のインスタンスが起動されます。
テキスト ファイルを作成し、いくつかのテキストを入力します。
挿入キャレットはマゼンタ、上書きキャレットは水色になります。
インジケーター マージン (テキスト ビューの左側) は、薄い緑になります。
入力したテキストを選択します。 選択したテキストの色が、薄いピンクになります。
テキストが選択された状態で、テキスト ウィンドウの外側の任意の場所をクリックします。 選択したテキストの色が、濃いピンクになります。
可視空白を有効にします ([編集] メニューの [詳細設定] をポイントし、[スペースの表示] をクリックします)。 テキストにいくつかのタブを入力します。 タブを表す赤い矢印が表示されます。