2012-04-11 15 views
7

Sto cercando di capire come ottenere le linee visibili in un oggetto IWpfTextView per posizionare un ViewPort e/o un ornamento di testo in base a linee visibili.Qual è la differenza tra ITrackingPoint, ITrackingSpan, SnapshotPoint, SnapshotSpan, ITextViewLine e quando utilizzare?

Sembra che questi 4 siano coinvolti in qualche modo, almeno gli Span. E per essere sicuro di capire, uno Span è solo una serie di caratteri nel TextView, giusto?

+0

OK, per il mio aggiornamento. – Chris

+1

Hai dimenticato di eseguire l'aggiornamento. 1. Le viste di testo non sono pensate in righe. Ciò è dovuto al delineamento, al ritorno a capo automatico, ecc. Che differisce da TextBuffer dal buffer visivo. 2. SnapshotSpan vs SnapshotPoint - Span rappresenta una stringa di caratteri. Punto, un personaggio. 3. TrackingPoint vs TrackingSpan. Simile ad altri Point and Span, tranne per determinare la posizione in ViewPort. Penso di essere corretto su questi. O almeno sembra muoversi in quel modo. – Chris

risposta

6

IWpfTextView.TextViewLines è la raccolta di linee visibili. In alcuni casi, la prima e l'ultima riga potrebbero essere nascoste o parzialmente visibili (ma la seconda e la penultima riga devono essere sempre completamente visibili). Per ottenere la raccolta di linee completamente visibili è possibile utilizzare IWpfTextView.TextViewLines.FirstVisibleLine e IWpfTextView.TextViewLines.LastVisibleLine oppure filtrare la raccolta per ITextViewLine.VisibilityState == VisibilityState.FullyVisible.

A Span A è una struttura per racchiudere una posizione iniziale e una lunghezza ma non contiene il testo effettivo. Esistono molti tipi di span nell'editor VS per scopi diversi, ad esempio uno SnapshotSpan è uno span di un ITextSnapshot, che memorizza una posizione iniziale, una lunghezza e l'istantanea a cui appartiene.

Edit:

dispiace ho perso la domanda nel titolo.

A Point si riferisce a una posizione e un Span si riferisce a un intervallo. La maggior parte delle API di VS Editor che ne prendono uno come parametro hanno un sovraccarico per l'altra.

ITrackingPoint e ITrackingSpan sono fuori ITextBuffer. "Tracciamento" significa che sfalsano/crescono/si restringono quando il buffer del testo cambia. Sono agnostici istantanei.

SnapshotPoint e SnapshotSpan sono fuori ITextSnapshot. Sono legati allo ITextSnapshot e sono immutabili.

ITextViewLine è una riga formattata per la visualizzazione. Di solito non è necessario cambiarlo, solo ottenendo informazioni visive da esso come Height o VisibilityState.