컨트롤을 시각적 스튜디오 코드 표면에 오버레이하는 방법
-
06-07-2019 - |
문제
Visual Studio Extensibilty API를 사용하여 SQL Server Management Studio에 Addin을 작성하고 있습니다. 나는 텍스트 표면에 컨트롤을 오버레이하는 데 약간의 성공을 거두었지만 (IntelliSense 콤보와 유사하게 Coderush/Refactor Action List 목록을 모방하려고합니다) 다음 속성을 기반으로 한 좌표 공간 만 찾을 수 있습니다.
get
{
var point = TextDocument.Selection.TopPoint;
return new Cursor( point.DisplayColumn, point.Line );
}
이 코드를 사용하면 Cols/Rows를 픽셀로 변환 할 수 있지만 텍스트 편집기가 수직 또는 수평으로 스크롤되었을 때 Cols/Rows를 상쇄하는 방법을 찾을 수 없습니다. 이로 인해 ListBox가 보이는 화면 공간 아래에서 사라집니다.
내가 찾고있는 것은 현재 Col/Row 쌍에서 화면 좌표를 가져 오는 방법으로, 스크롤 된 위치에 관계없이 ListBox를 커서 옆에 배치 할 수 있습니다.
해결책
TextDocument.selection 속성 (type textSelection의 선택 속성에는 텍스트 판 속성이 있습니다. 여기 더 많은 정보를 위해서. 명시 적으로 그렇게 말하지는 않지만 텍스트 판은 볼 수있는 화면의 일부입니다. 또한, 텍스트 판의 startpoint 속성은 스크롤 된 텍스트의 '오프셋'을 제공합니다.
따라서 선택의 시작점에서 TextPane.startPoint를 빼서 오프셋 커서 위치를 결정할 수있었습니다.
get
{
var start = TextDocument.Selection.TextPane.StartPoint;
var top = TextDocument.Selection.TopPoint;
return new Cursor(
top.DisplayColumn - start.DisplayColumn + 1 ,
top.Line - start.Line + 1
);
}
제휴하지 않습니다 StackOverflow