2011-05-31 13 views
5

Estoy en el foco de una ventana de herramientas. Al hacer doble clic en un nodo TreeView, el cursor debe moverse a una línea particular dentro del documento de código fuente abierto. He resuelto este problema mediante una llamada al comando Edit.GoTo línea como la siguiente:Extensibilidad de Visual Studio: Mover a línea en un TextDocument

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

Sin embargo no estoy muy conveniente con que a medida que pierda el foco de la toolwindow. ¿Hay alguna otra forma de pasar a una línea mediante el uso de la API de automatización?

+0

¿Podría cambiar el enfoque a la ventana de la herramienta después de su comando? – Cilvic

Respuesta

4

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

Para crear un grupo, con su uso:

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)); 

Y para desplazarse al rango de medición:

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

Dónde view es la IWpfTextView recibida por su Adornador (IWpfTextViewCreationListener)

Cuestiones relacionadas