2012-04-11 6 views
7

Estoy tratando de averiguar cómo obtener las líneas visibles en un IWpfTextView para colocar un ViewPort y/o un Adorno de texto basado en líneas visibles.¿Cuál es la diferencia entre ITrackingPoint, ITrackingSpan, SnapshotPoint, SnapshotSpan, ITextViewLine y cuándo usarlo?

Parece que estos 4 están involucrados de alguna manera, al menos en los tramos. Y para asegurarme de que entiendo, un Span es solo una serie de caracteres en el TextView ¿verdad?

+0

Muy bien, para mi propia actualización. – Chris

+1

Se olvidó de actualizar realmente. 1. TextViews no se piensa en líneas. Esto se debe a esquematizar, ajustar palabras, etc. que difiere el TextBuffer del búfer visual. 2. SnapshotSpan vs SnapshotPoint - Span representa una cadena de caracteres. Punto, un personaje. 3. TrackingPoint vs TrackingSpan. Similar a otro punto y rango, excepto que se usa para determinar la posición en ViewPort. Creo que estoy en lo cierto. O al menos parece moverse de esa manera. – Chris

Respuesta

6

IWpfTextView.TextViewLines es la colección de líneas visibles. En algunos casos, la primera y la última línea pueden estar ocultas o parcialmente visibles (pero la segunda y la penúltima línea deben estar siempre visibles). Para obtener la colección de líneas totalmente visibles, puede usar IWpfTextView.TextViewLines.FirstVisibleLine y IWpfTextView.TextViewLines.LastVisibleLine, o filtrar la colección por ITextViewLine.VisibilityState == VisibilityState.FullyVisible.

A Span es una estructura para envolver una posición de inicio y una longitud pero no retiene el texto real. Hay muchos tipos de tramas en VS Editor para diferentes propósitos, por ejemplo, SnapshotSpan es un intervalo de ITextSnapshot, que almacena una posición de inicio, una longitud y la instantánea a la que pertenece.

Editar:

En este momento me perdí la pregunta del título.

A Point se refiere a una posición y Span se refiere a un rango. La mayoría de las API VS Editor que toman uno como parámetro tienen sobrecarga para el otro.

ITrackingPoint y ITrackingSpan están fuera de ITextBuffer. "Seguimiento" significa que se compensan/crecen/disminuyen a medida que cambia el búfer de texto. Son instantáneas agnósticas.

SnapshotPoint y SnapshotSpan están fuera de ITextSnapshot. Están vinculados al ITextSnapshot y son inmutables.

ITextViewLine tiene una línea formateada para su visualización. Por lo general, no es necesario cambiarlo, solo se obtiene información visual del mismo como Height o VisibilityState.

Cuestiones relacionadas