3

我正在使用 Visual Studio 可扩展性 API 将插件写入 Sql Server Management Studio。我已经成功地将控件覆盖到文本表面上(我正在尝试模拟 CodeRush/Refactor 操作列表,类似于智能感知组合),但是我只能根据以下属性定位它的坐标空间:

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

这段代码确实允许我将列/行转换为像素,但是当文本编辑器垂直或水平滚动时,我找不到偏移列/行的方法。这会导致列表框在可见屏幕空间下方消失。

我正在寻找的是一种从当前列/行对获取屏幕坐标的方法,这样我就可以将列表框放在光标旁边,而不管滚动位置如何。

4

1 回答 1

1

类型为 TextSelection 的 TextDocument.Selection 属性具有 TextPane 属性 - 请参阅此处了解更多信息。它没有明确说明,但 TextPane 是屏幕中可见的部分。此外,TextPane 的 StartPoint 属性提供了滚动文本的“偏移量”。

因此,我能够通过从选择的 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 
    );
}
于 2009-10-28T22:01:25.310 回答