Поделиться через


Пошаговое руководство: Настройка внешнего вида текста

Можно настраивать представление текста, изменяя следующие свойства в сопоставлении редактор-формата:

  • Поле индикаторов

  • Курсор insert

  • Перепишите курсора

  • Выделенный текст

  • Текст, выделенный состояние бездействия (то есть, выделенный текст, потеряло фокус)

  • Видимый пробел

Обязательные компоненты

Чтобы выполнить это пошаговое руководство, необходимо устанавливать SDK для Visual Studio 2010. Дополнительные сведения о пакете SDK для Visual Studio и загрузить его см. в Центр разработчиков расширяемости Visual Studio разделе на веб-сайте MSDN.

Создание управляемой расширяемости проекта .NET Framework (платформа MEF)

Создание проекта MEF

  1. Создайте проект классификатора редактора c# или классификатора редакторе Visual Basic. Назовите решение ViewPropertyTest.

  2. Откройте файл source.extension.vsixmanifest в редакторе манифеста VSIX.

  3. Убедитесь, что заголовок Content содержит тип содержимого MEF и компонентов, что путь имеет значение ViewPropertyTest.dll.

  4. Сохранить и закрыть source.extension.vsixmanifest.

  5. Удалите существующие файлы классов.

Определение типа содержимого

Задать тип содержимого

  1. Добавьте файл классов и назовите его ViewPropertyModifier.

  2. Добавьте следующие директивы 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;
    
  3. Объявите класс с именем 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
    
  4. В этом классе импортировать 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();
    }
    

Построение и тестирование кода

Построение и тестирование кода

  1. Выполните построение решения.

    Если запустить этот проект в отладчике, второй экземпляр Visual Studio создается.

  2. Создайте текстовый файл и введите текст.

    • Курсор должен быть пурпурным и вставки курсора перезаписать должен быть бирюзой.

    • Поле индикаторов (слева от представления текста) должно быть салатово.

  3. Выберите текст, который был только что введенные. Цвет выделенного текста должен быть светл - пинк.

  4. Пока текст выбрано, щелкните в любом месте за пределами окна текста. Цвет выделенного текста должен быть пинком темным.

  5. Включите видимый пробел. (В меню Изменить выберите пункт Дополнительно а затем нажмите кнопку Показать пустое пространство). Введите некоторые вкладки в тексте. Красные стрелки, представляющие табуляции должны отображаться.

См. также

Основные понятия

Точки расширения редактора