Visual Studioコードサーフェスにコントロールをオーバーレイする方法

StackOverflow https://stackoverflow.com/questions/1619219

  •  06-07-2019
  •  | 
  •  

質問

Visual Studio Extensibilty APIを使用して、Sql Server Management Studioにアドインを作成しています。コントロールをテキストサーフェスにオーバーレイすることに成功しました(IntelliSenseコンボに似たCodeRush / Refactorアクションリストをエミュレートしようとしています)が、次のプロパティに基づいて座標空間のみを見つけることができます:

get
{
    var point = TextDocument.Selection.TopPoint;
    return new Cursor( point.DisplayColumn, point.Line );
}

このコードを使用すると、列/行をピクセルに変換できますが、テキストエディターを垂直または水平にスクロールしたときに列/行をオフセットする方法が見つかりません。これにより、リストボックスは表示されている画面スペースの下に表示されなくなります。

探しているのは、現在の列/行のペアから画面座標を取得する方法です。スクロール位置に関係なく、カーソルの隣にリストボックスを配置できます。

役に立ちましたか?

解決

TextSelectionタイプのTextDocument.SelectionプロパティにはTextPaneプロパティがあります-こちらをご覧ください。明示的には言っていませんが、TextPaneは表示される画面の一部です。さらに、TextPaneのStartPointプロパティは、スクロールされたテキストの「オフセット」を提供します。

したがって、Selectionの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 
    );
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top