Пошаговое руководство: Настройка внешнего вида текста
Можно настраивать представление текста, изменяя следующие свойства в сопоставлении редактор-формата:
Поле индикаторов
Курсор insert
Перепишите курсора
Выделенный текст
Текст, выделенный состояние бездействия (то есть, выделенный текст, потеряло фокус)
Видимый пробел
Обязательные компоненты
Чтобы выполнить это пошаговое руководство, необходимо устанавливать SDK для Visual Studio 2010. Дополнительные сведения о пакете SDK для Visual Studio и загрузить его см. в Центр разработчиков расширяемости Visual Studio разделе на веб-сайте MSDN.
Создание управляемой расширяемости проекта .NET Framework (платформа MEF)
Создание проекта MEF
Создайте проект классификатора редактора c# или классификатора редакторе Visual Basic. Назовите решение ViewPropertyTest.
Откройте файл source.extension.vsixmanifest в редакторе манифеста VSIX.
Убедитесь, что заголовок Content содержит тип содержимого MEF и компонентов, что путь имеет значение ViewPropertyTest.dll.
Сохранить и закрыть source.extension.vsixmanifest.
Удалите существующие файлы классов.
Определение типа содержимого
Задать тип содержимого
Добавьте файл классов и назовите его ViewPropertyModifier.
Добавьте следующие директивы using (выписки Imports в Visual Basic).
Imports System Imports System.Collections Imports System.Windows Imports System.Windows.Media Imports System.ComponentModel.Composition Imports Microsoft.VisualStudio.Text.Classification Imports Microsoft.VisualStudio.Text.Editor Imports Microsoft.VisualStudio.Utilities
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;
Объявите класс с именем TestViewCreationListener, который наследует от IWpfTextViewCreationListener. Экспортировать этот класс со следующими атрибутами:
ContentTypeAttribute для указания типа содержимого, к которому применяется этот прослушиватель.
TextViewRoleAttribute, чтобы указать роль этого прослушивателя.
<Export(GetType(IWpfTextViewCreationListener)), ContentType("text"), TextViewRole(PredefinedTextViewRoles.Document)> Friend Class TestViewCreationListener Implements IWpfTextViewCreationListener
[Export(typeof(IWpfTextViewCreationListener))] [ContentType("text")] [TextViewRole(PredefinedTextViewRoles.Document)] internal class TestViewCreationListener : IWpfTextViewCreationListener
В этом классе импортировать IEditorFormatMapService.
<Import()> Friend FormatMapService As IEditorFormatMapService = Nothing
[Import] internal IEditorFormatMapService FormatMapService = null;
Изменение свойств представления
Изменение свойств представления
Реализуйте метод TextViewCreated, так что будут изменены свойства представления, если представление будет открыто. Чтобы внести изменение, первые найти ResourceDictionary, соответствующее аспекту представления, которую необходимо найти. Затем изменить соответствующее свойство в словаре ресурсов и задайте свойства. Пакет вызовы метода SetProperties путем вызова метода BeginBatchUpdate, прежде чем установить свойства, а затем EndBatchUpdate после заданного свойства.
Public Sub TextViewCreated(ByVal textView As IWpfTextView) Implements IWpfTextViewCreationListener.TextViewCreated Dim formatMap As IEditorFormatMap = FormatMapService.GetEditorFormatMap(textView) Dim regularCaretProperties As ResourceDictionary = formatMap.GetProperties("Caret") Dim overwriteCaretProperties As ResourceDictionary = formatMap.GetProperties("Overwrite Caret") Dim indicatorMargin As ResourceDictionary = formatMap.GetProperties("Indicator Margin") Dim visibleWhitespace As ResourceDictionary = formatMap.GetProperties("Visible Whitespace") Dim selectedText As ResourceDictionary = formatMap.GetProperties("Selected Text") Dim inactiveSelectedText As ResourceDictionary = 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() End Sub
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 создается.
Создайте текстовый файл и введите текст.
Курсор должен быть пурпурным и вставки курсора перезаписать должен быть бирюзой.
Поле индикаторов (слева от представления текста) должно быть салатово.
Выберите текст, который был только что введенные. Цвет выделенного текста должен быть светл - пинк.
Пока текст выбрано, щелкните в любом месте за пределами окна текста. Цвет выделенного текста должен быть пинком темным.
Включите видимый пробел. (В меню Изменить выберите пункт Дополнительно а затем нажмите кнопку Показать пустое пространство). Введите некоторые вкладки в тексте. Красные стрелки, представляющие табуляции должны отображаться.