2011-05-31 58 views
5

我是ToolWindow的焦点。通过在TreeView节点上执行dobleclick,光标必须移动到打开的源代码文档中的特定行。我通过调用像这样Edit.GoTo行命令解决了这个问题:Visual Studio Extensibility:移动到TextDocument中的行

var commandName = "Edit.GoTo " + lineNumber; 
_dte.ExecuteCommand(commandName); 

但是我不认为很方便易,因为我失去了工具窗口的焦点。是否有另一种方式通过使用自动化API移动到一条线?

+0

您可以在命令后将焦点切换回工具窗口 – Cilvic 2011-06-01 12:37:05

回答

4

使用IViewScroller.EnsureSpanVisible(SnapshotSpan span, EnsureSpanVisibleOptions options)http://msdn.microsoft.com/en-us/library/dd886036.aspx

要创建一个跨度,使用:

var lines = view.VisualSnapshot.Lines; 

var startLine = lines.FirstOrDefault(a => a.LineNumber == fromLine - 1); 
var endLine = lines.FirstOrDefault(a => a.LineNumber == toLine - 1); 

if (startLine == null || endLine == null) 
    return; 

var startPosition = startLine.Start; 
var endPosition = endLine.Start; 

var span = new SnapshotSpan(view.TextSnapshot, Span.FromBounds(startPosition, endPosition)); 

而且滚动到跨度:

layer.TextView.ViewScroller.EnsureSpanVisible(span, EnsureSpanVisibleOptions.AlwaysCenter); 

view是所提供的IWpfTextView您装饰者(IWpfTextViewCreationListener

相关问题