다음을 통해 공유


편집기 확장 지점

편집기 관리 확장성 프레임 워크 (MEF) 구성 요소와 확장할 수 있는 확장 지점을 제공 합니다. 다음 주 확장 지점을 범주입니다.

  • 콘텐츠 형식

  • 분류 종류 및 분류 형식

  • 여백 및 스크롤 막대

  • 태그

  • 장식

  • 마우스 프로세서

  • 드롭다운 처리기

  • 옵션

  • IntelliSense

콘텐츠 형식 확장

콘텐츠 형식은 정의 종류의 텍스트 편집기에서 예를 들어 처리, "텍스트", "코드" 또는 "c#"입니다. 해당 형식의 변수를 선언 하 여 새 콘텐츠 형식을 정의할 ContentTypeDefinition 및 새 콘텐츠 형식에 고유한 이름을 지정 합니다. 컨텐트 유형 편집기를 등록 하려면 다음 특성을 내보냅니다.

  • NameAttribute콘텐츠 형식 이름이입니다.

  • BaseDefinitionAttribute이 콘텐츠 형식에서 파생 된 콘텐츠 형식 이름이입니다. 콘텐츠 형식 여러 콘텐츠 형식에서 상속 될 수 있습니다.

때문에 ContentTypeDefinition 클래스는 봉인, 형식 매개 변수를 내보낼 수 있습니다.

다음 예제에서는 내보내기 특성 콘텐츠 형식 정의를 보여 줍니다.

[Export]
[Name("test")]
[BaseDefinition("code")]
[BaseDefinition("projection")]
internal static ContentTypeDefinition TestContentTypeDefinition;

0 개 이상의 기존 콘텐츠 형식에서 콘텐츠 형식을 기반으로 수 있습니다. 기본 제공 형식은 다음과 같습니다.

  • 하나: 기본 콘텐츠 형식입니다. 다른 모든 콘텐츠 형식의 부모입니다.

  • 텍스트: 투영 되지 않은 내용에 대 한 기본 형식입니다. "모든"에서 상속합니다.

  • 일반 텍스트: 비 코드 텍스트입니다. "텍스트"에서 상속합니다.

  • 코드: 모든 종류의 코드에 대 한. "텍스트"에서 상속합니다.

  • 삽입: 텍스트 모든 종류의 처리에서 제외 됩니다. 이 콘텐츠 형식의 텍스트 확장 적용 되지 않습니다 됩니다.

  • 투영: 버퍼의 내용을 투영에 대 한. "모든"에서 상속합니다.

  • Intellisense:의 내용을 IntelliSense에 대 한. "텍스트"에서 상속합니다.

  • Sighelp: 서명 수 있습니다. "Intellisense"에서 상속합니다.

  • Sighelp-박사: 서명 도움말을 참조 하십시오. "Intellisense"에서 상속합니다.

다음은 Visual Studio 정의 된 콘텐츠 형식 중 일부 및 일부 Visual Studio 호스트 하는 언어입니다.

  • Basic

  • C/C + +

  • ConsoleOutput

  • CSharp

  • CSS

  • ENC

  • FindResults

  • /F

  • HTML

  • JScript

  • XAML

  • XML

사용할 수 있는 콘텐츠 형식 목록을 검색 하려면 가져오기는 IContentTypeRegistryService, 편집기에 대 한 콘텐츠 형식의 컬렉션을 유지 합니다. 다음 코드는 속성으로이 서비스를 가져옵니다.

[Import]
internal IContentTypeRegistryService ContentTypeRegistryService { get; set; }

콘텐츠 형식의 파일 이름 확장명과 연결할 수 있습니다 FileExtensionToContentTypeDefinition.

참고

Visual Studio 파일 이름 확장명을 사용 하 여 등록은 ProvideLanguageExtensionAttribute 언어 서비스 패키지입니다.FileExtensionToContentTypeDefinition MEF 콘텐츠 형식을이 방식으로 등록 된 파일 이름 확장명을 연결 합니다.

콘텐츠 형식 정의에 파일 이름 확장명을 내보내려면 다음과 같은 특성을 포함 해야 합니다.

때문에 FileExtensionToContentTypeDefinition 클래스는 봉인, 형식 매개 변수를 내보낼 수 있습니다.

다음 예제에서는 내보내기 특성 콘텐츠 형식 정의 하는 파일 이름 확장명을 보여 줍니다.

[Export]
[FileExtension(".test")]
[ContentType("test")]
internal static FileExtensionToContentTypeDefinition TestFileExtensionDefinition;

IFileExtensionRegistryService 파일 및 콘텐츠 형식 간의 연결을 관리 합니다.

형식을 확장 하는 분류 종류 및 분류

다른 처리 (예를 들어, "메모" 텍스트와 "키워드" 텍스트 파란색 녹색 색상 지정)를 제공 하려는 텍스트의 종류를 정의 합니다 분류 유형을 사용할 수 있습니다. 형식의 변수를 선언 하 여 새 분류 형식 정의 ClassificationTypeDefinition 및 고유 이름을 지정 합니다.

분류 유형 편집기를 등록 하려면 다음 특성을 내보냅니다.

  • NameAttribute: 분류 형식의 이름입니다.

  • BaseDefinitionAttribute:을이 분류 형식이 상속 분류 형식의 이름입니다. "텍스트", 모든 분류 유형을 상속 하 고 분류 유형이 다른 여러 분류 형식에서 상속 될 수 있습니다.

때문에 ClassificationTypeDefinition 클래스는 봉인, 형식 매개 변수를 내보낼 수 있습니다.

다음 예제에서는 분류 형식 정의에서 내보내기 특성을 보여 줍니다.

[Export]
[Name("csharp.test")]
[BaseDefinition("test")]
internal static ClassificationTypeDefinition CSharpTestDefinition;

IStandardClassificationService 표준 분류에 대 한 액세스를 제공 합니다. 기본 분류 종류는 다음과 같습니다.

  • "텍스트"

  • "자연 언어" ("텍스트"에서 파생 됩니다.)

  • "공식 언어 ("텍스트"에서 파생 됩니다.)"

  • "string ("리터럴"에서 파생 됩니다.)"

  • "문자 ("리터럴"에서 파생 됩니다.)"

  • "숫자" ("리터럴"에서 파생 됩니다.)

서로 다른 오류 형식 집합이 상속 ErrorTypeDefinition. 이들은 다음과 같은 오류가 포함 됩니다.

  • "구문 오류"

  • "컴파일러 오류"

  • "다른 오류"

  • "경고"

사용 가능한 분류 형식 목록을 검색 하려면 가져오기는 IClassificationTypeRegistryService, 분류 형식의 컬렉션 편집기에 대 한 유지. 다음 코드는 속성으로이 서비스를 가져옵니다.

[Import]
internal IClassificationTypeRegistryService ClassificationTypeRegistryService { get; set; }

분류 형식 정의 대해 새 분류 형식을 정의할 수 있습니다. 클래스를 파생 시키는 ClassificationFormatDefinition 형식으로 내보내기 및 EditorFormatDefinition함께 다음 속성:

다음 예제에서는 내보내기 특성 분류 형식 정의를 보여 줍니다.

[Export(typeof(EditorFormatDefinition))]
[ClassificationType(ClassificationTypeNames = "test")]
[Name("test")]
[DisplayName("Test")]
[UserVisible(true)]
[Order(After = Priority.Default, Before = Priority.High)]
internal sealed class TestFormat : ClassificationFormatDefinition

사용 가능한 형식 목록을 검색 하려면 가져오기는 IEditorFormatMapService, 형식 컬렉션 편집기에 대 한 유지 합니다. 다음 코드는 속성으로이 서비스를 가져옵니다.

[Import]
internal IEditorFormatMapService FormatMapService { get; set; }

확장 된 여백 및 스크롤 막대

주 보기 요소에 텍스트 뷰 편집기의 여백과 스크롤 막대의입니다. 다양 한 여백 텍스트 보기 주위에 나타나는 표준 여백에 제공할 수 있습니다.

구현 된 IWpfTextViewMargin 에 여백을 정의 하는 인터페이스입니다. 또한 구현 해야는 IWpfTextViewMarginProvider 인터페이스의 여백을 만들 수 있습니다.

편집기와 여백 공급자를 등록 하려면 공급자와 함께 다음과 같은 특성을 내보내야 합니다.

  • NameAttribute: 이름 여백입니다.

  • OrderAttribute: 여백이 나타나는 경우 다른 여백을 기준으로 주문 합니다.

    다음은 기본 제공 여백입니다.

    • "Wpf 가로 Scrollbar"

    • "Wpf 세로 Scrollbar"

    • "Wpf 줄 번호 여백"

    순서 특성에 있는 가로 여백 After="Wpf Horizontal Scrollbar" 의 기본 제공 여백 및 순서 특성에 있는 가로 여백 아래 표시 됩니다 Before ="Wpf Horizontal Scrollbar" 기본 제공 여백 위에 표시 됩니다. 순서 특성의가 세로 여백을 마우스 오른쪽 단추로 After="Wpf Vertical Scrollbar" 는 스크롤 막대의 오른쪽에 표시 됩니다. 순서 특성의가 세로 여백 왼쪽 After="Wpf Line Number Margin" (표시 된 경우) 줄 번호 여백 왼쪽에 나타납니다.

  • MarginContainerAttribute: 종류의 여백 (왼쪽, 오른쪽, 위쪽 또는 아래쪽).

  • ContentTypeAttribute: 여백에 있는 올바른 종류의 콘텐츠 (예: "텍스트" 또는 "코드").

다음 예제에서는 내보내기 특성 줄 번호 여백 오른쪽으로 나타나는 여백 여백 공급자를 보여 줍니다.

[Export(typeof(IWpfTextViewMarginProvider))]
[Name("TestMargin")]
[Order(Before = "Wpf Line Number Margin")]
[MarginContainer(PredefinedMarginNames.Left)]
[ContentType("text")] 

태그 확장

태그는 여러 종류의 텍스트와 데이터를 연결 하는 방법입니다. 대부분의 경우 연결 된 데이터 시각 효과로 표시 되지만 모든 태그를 시각적 표시 되어. 구현 하 여 고유한 태그의 종류를 정의할 수 있습니다 ITag. 도 구현 해야 ITagger 태그 텍스트 범위에서 지정 된 집합에 대해 제공 하 고 있는 ITaggerProvider tagger를 제공 합니다. Tagger 공급자와 함께 다음과 같은 특성을 내보내야 합니다.

다음 예제에서는 내보내기 특성 tagger 공급자를 보여 줍니다.

[Export(typeof(ITaggerProvider))]
[ContentType("text")]
[TagType(typeof(TestTag))]
internal class TestTaggerProvider : ITaggerProvider

태그는 다음과 같은 기본 제공 있습니다.

찾기 및 버퍼 및 보기에 대 한 태그를 사용 하는 가져오기는 IViewTagAggregatorFactoryService 또는 IBufferTagAggregatorFactoryService, 부여 하면는 ITagAggregator 요청한 종류의. 다음 코드는 속성으로이 서비스를 가져옵니다.

[Import]
internal IViewTagAggregatorFactoryService ViewTagAggregatorFactoryService { get; set; }

태그와 MarkerFormatDefinitions

확장 하 여 해당 MarkerFormatDefinition 태그의 모양을 정의 하는 클래스입니다. 클래스를 내보내야 합니다 (다른 이름으로 EditorFormatDefinition)는 다음과 같은 특성:

생성자에서 태그의 모양과 표시 이름을 정의합니다. BackgroundColor채우기 색을 정의 하 고 ForegroundColor 의 테두리 색을 정의 합니다. DisplayName 지역화 가능 형식 정의 이름입니다.

형식 정의의 예는 다음과 같습니다.

[Export(typeof(EditorFormatDefinition))]
[Name("MarkerFormatDefinition/HighlightWordFormatDefinition")]
[UserVisible(true)]
internal class HighlightWordFormatDefinition : MarkerFormatDefinition
{
    public HighlightWordFormatDefinition()
    {
        this.BackgroundColor = Colors.LightBlue;
        this.ForegroundColor = Colors.DarkBlue;
        this.DisplayName = "Highlight Word"; 
        this.ZOrder = 5;
    }
}

이 형식 정의 태그를 적용 하려면 이름 (표시 이름 아님) 클래스의 이름 속성에 설정을 참조 하십시오.

참고

예를 MarkerFormatDefinition, HighlightWordFormatDefinition 클래스를 참조 하십시오. 연습: 텍스트 강조 표시.

장식 확장

장식 텍스트 보기에 표시 되는 텍스트를 추가할 수 있습니다 또는 자체의 텍스트를 볼 수 있는 시각 효과 정의 합니다. 직접 장식 형식으로 정의할 수 있습니다 UIElement.

선언 해야 장식 클래스에는 AdornmentLayerDefinition. 장식 레이어를 등록 하려면 다음 특성을 내보냅니다.

다음 예제는 장식 레이어 정의에서 내보내기 특성을 보여 줍니다.

[Export]
[Name("TestEmbeddedAdornment")]
[Order(After = PredefinedAdornmentLayers.Selection, Before = PredefinedAdornmentLayers.Text)]
internal AdornmentLayerDefinition testLayerDefinition;

구현 하는 두 번째 클래스를 만들어야 합니다 IWpfTextViewCreationListener 처리 하는 TextViewCreated 인스턴스화를 장식 하는 이벤트입니다. 이 클래스는 다음과 같은 특성이 함께 내보내야 합니다.

  • ContentTypeAttribute: 콘텐츠 (예: "텍스트" 또는 "코드")의 종류를 장식 있는 유효한.

  • TextViewRoleAttribute: 종류를이 장식이 있는 유효한 텍스트 보기. 클래스 PredefinedTextViewRoles 미리 정의 된 텍스트 보기 역할 집합이 있습니다. 예를 들어, Document 파일의 뷰 텍스트에 주로 사용 됩니다. Interactive사용자가 편집 하거나 마우스와 키보드를 사용 하 여 이동할 수 있는 텍스트 보기에 사용 됩니다. 예 Interactive 뷰는 편집기의 텍스트 보기와 출력 창.

다음 예제는 장식 공급자에 내보내기 특성을 보여 줍니다.

[Export(typeof(IWpfTextViewCreationListener))]
[ContentType("csharp")]
[TextViewRole(PredefinedTextViewRoles.Document)]
internal sealed class TestAdornmentProvider : IWpfTextViewCreationListener

공간 협상 장식 공간을 텍스트와 같은 수준입니다. 장식의이 종류를 만들려면에서 상속 된 태그 클래스 정의 SpaceNegotiatingAdornmentTag, 장식에서 차지 하는 공간을 정의 합니다.

모든 액세서리와 장식 계층 정의 내보내야 합니다.

[Export]
[Name("TestAdornment")]
[Order(After = DefaultAdornmentLayers.Text)]
internal AdornmentLayerDefinition testAdornmentLayer;

공간 협상 장식 인스턴스화를 구현 하는 클래스를 만들어야 합니다 ITaggerProvider을 구현 하는 클래스에 IWpfTextViewCreationListener (장식의 다른 종류와 마찬가지로).

Tagger 공급자를 등록 하려면 다음 특성을 내보내야 합니다.

다음 예제에서는 내보내기 특성 tagger 공급자 공간 협상 장식 태그를 보여 줍니다.

[Export(typeof(ITaggerProvider))]
[ContentType("text")]
[TextViewRole(PredefinedTextViewRoles.Document)]
[TagType(typeof(SpaceNegotiatingAdornmentTag))]
[TagType(typeof(TestSpaceNegotiatingTag))]
internal sealed class TestTaggerProvider : ITaggerProvider

마우스 프로세서를 확장합니다.

마우스 입력에 대 한 특수 처리를 추가할 수 있습니다. 상속 하는 클래스를 만드는 MouseProcessorBase 및 마우스 이벤트를 처리 하는 입력에 대 한 재정의 합니다. 또한 구현 해야 IMouseProcessorProvider 두 번째 클래스에와 함께 내보낼는 ContentTypeAttribute 마우스 처리기 있는 올바른 종류의 콘텐츠 (예: "텍스트" 또는 "코드")를 지정 합니다.

다음 예제에서는 마우스 프로세서 공급자에서 내보내기 특성을 보여 줍니다.

[Export(typeof(IMouseProcessorProvider))]
[Name("test mouse processor")]
[ContentType("text")]
[TextViewRole(PredefinedTextViewRoles.Interactive)] 
internal sealed class TestMouseProcessorProvider : IMouseProcessorProvider

드롭다운 처리기 확장

구현 하는 클래스를 작성 하 여 특정 종류의 텍스트에 대 한 끌어 놓기 처리기의 동작을 사용자 지정할 수 있습니다 IDropHandler 두 번째 클래스를 구현 하 고 IDropHandlerProvider 드롭 처리기를 만들 수 있습니다. 드롭다운 처리기는 다음과 같은 특성이 함께 내보내야 합니다.

  • DropFormatAttribute:이 놓기 처리기 있는 유효한 텍스트 형식입니다. 다음 형식에서 낮은 우선 순위를 최상위에서 처리 됩니다.

    1. 모든 사용자 지정 서식

    2. FileDrop

    3. EnhancedMetafile

    4. WaveAudio

    5. Riff

    6. Dif

    7. 로캘

    8. Palette

    9. PenData

    10. 순차 가능

    11. SymbolicLink

    12. Xaml

    13. XamlPackage

    14. Tiff

    15. 비트맵

    16. Dib

    17. MetafilePicture

    18. CSV

    19. System.String

    20. HTML 형식

    21. UnicodeText

    22. OEMText

    23. Text

  • NameAttribute: 드롭 처리기의 이름입니다.

  • OrderAttribute: 기본 끌어 놓기 처리기 전후 놓기 처리기의 순서입니다. Visual Studio 대 한 기본 끌어 놓기 처리기 "DefaultFileDropHandler" 라고 합니다.

다음은 내보내기 특성 놓기 처리기 공급자를 보여 줍니다.

[Export(typeof(IDropHandlerProvider))]
[DropFormat("Text")] 
[Name("TestDropHandler")]
[Order(Before="DefaultFileDropHandler")] 
internal class TestDropHandlerProvider : IDropHandlerProvider

편집기 옵션을 확장합니다.

옵션 텍스트 보기에는 특정 범위에만, 예를 들어, 유효한 것으로 정의할 수 있습니다. 편집기는이 일련의 미리 정의 된 옵션 제공: 편집기 옵션, 옵션 보기 및 보기 옵션 Windows Presentation Foundation (WPF). 이러한 옵션을 찾을 수 있습니다 DefaultOptions, DefaultTextViewOptions, 및 DefaultWpfViewOptions.

새 옵션을 추가 하려면이 옵션 정의 클래스 중 하나에서 클래스를 파생 합니다.

다음 예제에서는 부울 값이 있는 옵션 정의 내보내는 방법을 보여 줍니다.

[Export(typeof(EditorOptionDefinition))]
internal sealed class TestOption : EditorOptionDefinition<bool>

IntelliSense를 확장합니다.

IntelliSense 그룹의 구조화 된 텍스트에 대 한 정보를 제공 하는 기능에 대 한 일반 용어에 대 한 문 완성입니다. 이러한 기능에는 문 완성, 서명 도움말, 요약 정보 및 스마트 태그 포함 됩니다. 문 완성 언어 키워드 또는 멤버 이름을 정확 하 게 입력할 수 있습니다. 서명 하거나 서명을 사용자가 방금 입력 한 메서드에 대 한 시그니처 도움말을 표시 합니다. 마우스를 놓으면 전체 서명 형식이 나 멤버 이름에 대 한 요약 정보를 표시 합니다. 예를 들어, 특정 상황에서 특정 식별자에 대 한 추가 작업 한 항목 이름이 바뀐 후 변수의 모든 항목 이름 바꾸기 스마트 태그를 제공 합니다.

IntelliSense 기능의 거의 모든 경우에 동일:

  • IntelliSense는 브로커 전체 프로세스에 대 한 책임이 있습니다.

  • IntelliSense는 세션 사이의 발표자 committal 또는 선택 취소를 트리거하는 이벤트 시퀀스를 나타냅니다. 세션은 일반적으로 일부 사용자 제스처에 의해 트리거됩니다.

  • IntelliSense는 컨트롤러 세션 시작 및 종료 해야 시기를 결정 하는 데 담당 합니다. 또한 정보 커밋되도록 합니다 및 세션을 취소 해야 결정 합니다.

  • IntelliSense는 원본 콘텐츠를 제공 하 고 가장 일치 하는 결정 합니다.

  • IntelliSense는 발표자 의 내용을 표시 하는 역할을 담당 합니다.

대부분의 경우에 소스와 컨트롤러를 제공 하는 것이 좋습니다. 표시를 사용자 지정 하는 경우에 발표자를 제공할 수도 있습니다.

IntelliSense 소스를 구현합니다.

소스를 사용자 지정 하려면 하나 이상의 다음 소스 인터페이스를 구현 해야 합니다.

또한, 같은 종류의 공급자를 구현 해야 합니다.

공급자는 다음과 같은 특성이 함께 내보내야 합니다.

  • NameAttribute: 해당 소스의 이름입니다.

  • ContentTypeAttribute: 소스 적용 되는 종류의 콘텐츠 (예: "텍스트" 또는 "코드").

  • OrderAttribute: 소스 (다른 원본)를 기준으로 표시 되어야 하는 순서입니다.

  • 다음 예제에서는 완료 원본 공급자에서 내보내기 특성을 보여 줍니다.

Export(typeof(ICompletionSourceProvider))]
[Name(" Test Statement Completion Provider")]
[Order(Before = "default")]
[ContentType("text")]
internal class TestCompletionSourceProvider : ICompletionSourceProvider

IntelliSense 소스를 구현 하는 방법에 대 한 자세한 내용은 다음 연습을 참조 하십시오.

연습: 요약 정보 도구 설명 표시

연습: 서명 도움말 표시

연습: 문 완성 표시

IntelliSense 컨트롤러 구현

컨트롤러를 사용자 지정 하 여 구현 해야는 IIntellisenseController 인터페이스입니다. 또한, 컨트롤러가 공급자와 함께 다음과 같은 특성을 구현 해야 합니다.

  • NameAttribute: 컨트롤러의 이름입니다.

  • ContentTypeAttribute: 컨트롤러에 적용 되는 종류의 콘텐츠 (예: "텍스트" 또는 "코드").

  • OrderAttribute: 컨트롤러 (다른 컨트롤러)를 기준으로 표시 되어야 하는 순서입니다.

다음 예제에서는 내보내기 특성 완성 컨트롤러가 공급자를 보여 줍니다.

Export(typeof(IIntellisenseControllerProvider))]
[Name(" Test Controller Provider")]
[Order(Before = "default")]
[ContentType("text")]
internal class TestIntellisenseControllerProvider : IIntellisenseControllerProvider

IntelliSense 컨트롤러를 사용 하는 방법에 대 한 자세한 내용은 다음 연습을 참조 하십시오.

연습: 요약 정보 도구 설명 표시