TextPointer Classe

Definizione

Rappresenta una posizione all'interno di un oggetto FlowDocument o TextBlock.

public ref class TextPointer : System::Windows::Documents::ContentPosition
public class TextPointer : System.Windows.Documents.ContentPosition
type TextPointer = class
    inherit ContentPosition
Public Class TextPointer
Inherits ContentPosition
Ereditarietà
TextPointer

Esempio

Nell'esempio seguente viene illustrato come usare un TextPointer oggetto per trovare una posizione appena all'interno del primo Run elemento in un contenitore di testo specificato.

// This method returns the position just inside of the first text Run (if any) in a 
// specified text container.
TextPointer FindFirstRunInTextContainer(DependencyObject container)
{
    TextPointer position = null;

    if (container != null){
        if (container is FlowDocument)
            position = ((FlowDocument)container).ContentStart;
        else if (container is TextBlock)
            position = ((TextBlock)container).ContentStart;
        else
            return position;
    }
    // Traverse content in forward direction until the position is immediately after the opening 
    // tag of a Run element, or the end of content is encountered.
    while (position != null)
    {
        // Is the current position just after an opening element tag?
        if (position.GetPointerContext(LogicalDirection.Backward) == TextPointerContext.ElementStart)
        {
            // If so, is the tag a Run?
            if (position.Parent is Run)
                break;
        }

        // Not what we're looking for; on to the next position.
        position = position.GetNextContextPosition(LogicalDirection.Forward);
    }
        
    // This will be either null if no Run is found, or a position just inside of the first Run element in the
    // specifed text container.  Because position is formed from ContentStart, it will have a logical direction
    // of Backward.
    return position;
}
' This method returns the position just inside of the first text Run (if any) in a 
' specified text container.
Private Function FindFirstRunInTextContainer(ByVal container As DependencyObject) As TextPointer
    Dim position As TextPointer = Nothing

    If container IsNot Nothing Then
        If TypeOf container Is FlowDocument Then
            position = (CType(container, FlowDocument)).ContentStart
        ElseIf TypeOf container Is TextBlock Then
            position = (CType(container, TextBlock)).ContentStart
        Else
            Return position
        End If
    End If
    ' Traverse content in forward direction until the position is immediately after the opening 
    ' tag of a Run element, or the end of content is encountered.
    Do While position IsNot Nothing
        ' Is the current position just after an opening element tag?
        If position.GetPointerContext(LogicalDirection.Backward) = TextPointerContext.ElementStart Then
            ' If so, is the tag a Run?
            If TypeOf position.Parent Is Run Then
                Exit Do
            End If
        End If

        ' Not what we're looking for on to the next position.
        position = position.GetNextContextPosition(LogicalDirection.Forward)
    Loop

    ' This will be either null if no Run is found, or a position just inside of the first Run element in the
    ' specifed text container.  Because position is formed from ContentStart, it will have a logical direction
    ' of Backward.
    Return position
End Function

Nell'esempio seguente viene implementato un algoritmo di ricerca semplicistico usando TextPointer le funzionalità.

// This method will search for a specified word (string) starting at a specified position.
TextPointer FindWordFromPosition(TextPointer position, string word)
{
    while (position != null)
    {
         if (position.GetPointerContext(LogicalDirection.Forward) == TextPointerContext.Text)
         {
             string textRun = position.GetTextInRun(LogicalDirection.Forward);

             // Find the starting index of any substring that matches "word".
             int indexInRun = textRun.IndexOf(word);
             if (indexInRun >= 0)
             {
                 position = position.GetPositionAtOffset(indexInRun);
                 break;
             }
         }
         else
        {
            position = position.GetNextContextPosition(LogicalDirection.Forward);
        }
    }

     // position will be null if "word" is not found.
     return position; 
}
' This method will search for a specified word (string) starting at a specified position.
Private Function FindWordFromPosition(ByVal position As TextPointer, ByVal word As String) As TextPointer
    Do While position IsNot Nothing
        If position.GetPointerContext(LogicalDirection.Forward) = TextPointerContext.Text Then
            Dim textRun As String = position.GetTextInRun(LogicalDirection.Forward)

            ' Find the starting index of any substring that matches "word".
            Dim indexInRun As Integer = textRun.IndexOf(word)
            If indexInRun >= 0 Then
                position = position.GetPositionAtOffset(indexInRun)
                Exit Do
            End If
        Else
            position = position.GetNextContextPosition(LogicalDirection.Forward)
        End If
    Loop

    ' position will be null if "word" is not found.
    Return position
End Function

Commenti

La TextPointer classe introduce la terminologia seguente:

  • Posizione: intrinsecamente, un TextPointer oggetto punta sempre a una posizione nel contenuto. Tali posizioni rientrano tra i caratteri nel contenuto o tra i tag degli elementi di contenuto del flusso che definiscono la struttura per il contenuto.

  • Posizione corrente: poiché un TextPointer oggetto indica sempre una posizione e, poiché molte delle operazioni che possono essere eseguite tramite un TextPointer oggetto sono relative alla posizione attualmente puntata da TextPointer, è opportuno fare semplicemente riferimento alla posizione indicata da un TextPointer oggetto come posizione corrente.

  • Posizione di inserimento: una posizione di inserimento è una posizione in cui è possibile aggiungere nuovo contenuto senza interrompere alcuna regola semantica per il contenuto associato. In pratica, una posizione di inserimento si trova in qualsiasi punto del contenuto in cui è possibile posizionare un cursore. Un esempio di posizione valida TextPointer che non è una posizione di inserimento è la posizione tra due tag adiacenti Paragraph , ovvero tra il tag di chiusura del paragrafo precedente e il tag di apertura del paragrafo successivo.

  • Simbolo: ai fini delle TextPointer operazioni che coinvolgono simboli, uno dei seguenti è considerato un simbolo:

    • Tag di apertura o chiusura per un TextElement elemento.

    • Elemento UIElement contenuto in un oggetto InlineUIContainer o BlockUIContainer. Si noti che tale UIElement oggetto viene sempre conteggiato come esattamente un simbolo. Qualsiasi contenuto o elemento aggiuntivo contenuto contenuto da UIElement non viene conteggiato come simboli.

    • Ogni carattere Unicode a 16 bit all'interno di un elemento di testo Run .

  • Contenitore di testo: un contenitore di testo è l'elemento che costituisce il bordo finale per il contenuto del flusso a portata di mano; la posizione indicata da un TextPointer oggetto rientra sempre all'interno di un contenitore di testo. Attualmente, un contenitore di testo deve essere o FlowDocument .TextBlock In generale, le operazioni tra TextPointer istanze in contenitori di testo diversi non sono supportate.

  • Documento: il contenuto di un contenitore di testo viene definito documento, come nel IsInSameDocument metodo e nelle DocumentStart proprietà e DocumentEnd .

La TextPointer classe è progettata per facilitare l'attraversamento e la manipolazione del contenuto rappresentato da Windows Presentation Foundation (WPF) elementi di contenuto del flusso; in generale, tali elementi derivano da TextElement. Alcune delle operazioni che TextPointer facilitano includono quanto segue:

La posizione e LogicalDirection indicata da un TextPointer oggetto non sono modificabili. Quando il contenuto viene modificato o modificato, la posizione indicata da un TextPointer oggetto non cambia rispetto al testo circostante. L'offset di tale posizione dall'inizio del contenuto viene modificato in modo corrispondente in modo da riflettere la nuova posizione relativa nel contenuto. Ad esempio, un TextPointer oggetto che indica una posizione all'inizio di un determinato paragrafo continua a puntare all'inizio di tale paragrafo anche quando il contenuto viene inserito o eliminato prima o dopo il paragrafo.

La TextPointer classe non fornisce costruttori pubblici. Un'istanza di TextPointer viene creata utilizzando proprietà o metodi di altri oggetti (inclusi altri TextPointer oggetti). L'elenco seguente fornisce alcuni esempi di metodi e proprietà che creano e restituiscono un oggetto TextPointer. Questo elenco non è esaustivo:

Proprietà

DocumentEnd

Ottiene un oggetto TextPointer alla fine del contenuto nel contenitore di testo associato alla posizione corrente.

DocumentStart

Ottiene un oggetto TextPointer all'inizio del contenuto nel contenitore di testo associato alla posizione corrente.

HasValidLayout

Ottiene un valore che indica se il contenitore di testo associato alla posizione corrente ha un layout valido (aggiornato).

IsAtInsertionPosition

Ottiene un valore che indica se la posizione corrente è una posizione di inserimento.

IsAtLineStartPosition

Ottiene un valore che indica se la posizione corrente è all'inizio di una riga.

LogicalDirection

Ottiene la direzione logica associata alla posizione corrente e utilizzata per risolvere le ambiguità del contenuto associato alla posizione corrente.

Paragraph

Ottiene il paragrafo che fornisce l'ambito alla posizione corrente, se presente.

Parent

Ottiene il padre logico che fornisce l'ambito alla posizione corrente.

Metodi

CompareTo(TextPointer)

Esegue un confronto ordinale tra le posizioni specificate dall'oggetto TextPointer corrente e un secondo oggetto TextPointer specificato.

DeleteTextInRun(Int32)

Elimina il numero di caratteri specificato dalla posizione indicata dall'oggetto TextPointer corrente.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetAdjacentElement(LogicalDirection)

Restituisce l'elemento, se presente, che delimita l'oggetto TextPointer corrente nella direzione logica specificata.

GetCharacterRect(LogicalDirection)

Restituisce un riquadro delimitatore del testo (Rect) per il contenuto che delimita l'oggetto TextPointer corrente nella direzione logica specificata.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetInsertionPosition(LogicalDirection)

Restituisce un oggetto TextPointer nella posizione di inserimento più vicina, nella direzione logica specificata.

GetLineStartPosition(Int32)

Restituisce un oggetto TextPointer all'inizio di una riga specificata in relazione all'oggetto TextPointer corrente.

GetLineStartPosition(Int32, Int32)

Restituisce un oggetto TextPointer all'inizio di una riga specificata in relazione all'oggetto TextPointer corrente e segnala quante righe sono state ignorate.

GetNextContextPosition(LogicalDirection)

Restituisce un puntatore al simbolo successivo nella direzione logica specificata.

GetNextInsertionPosition(LogicalDirection)

Restituisce un oggetto TextPointer nella posizione di inserimento successiva nella direzione logica specificata.

GetOffsetToPosition(TextPointer)

Restituisce il conteggio dei simboli tra l'oggetto TextPointer corrente e un secondo oggetto TextPointer specificato.

GetPointerContext(LogicalDirection)

Restituisce un indicatore di categoria per il contenuto adiacente all'oggetto TextPointer corrente nella direzione logica specificata.

GetPositionAtOffset(Int32)

Restituisce un oggetto TextPointer nella posizione indicata dall'offset specificato, in simboli, dall'inizio dell'oggetto TextPointer corrente.

GetPositionAtOffset(Int32, LogicalDirection)

Restituisce un oggetto TextPointer nella posizione indicata dall'offset specificato, in simboli, dall'inizio dell'oggetto TextPointer corrente e nella direzione specificata.

GetTextInRun(LogicalDirection)

Restituisce una stringa contenente il testo adiacente all'oggetto TextPointer corrente nella direzione logica specificata.

GetTextInRun(LogicalDirection, Char[], Int32, Int32)

Copia il numero di caratteri massimo specificato da un testo adiacente nella direzione specificata in una matrice di caratteri fornita dal chiamante.

GetTextRunLength(LogicalDirection)

Restituisce il numero di caratteri Unicode tra l'oggetto TextPointer corrente e il simbolo non testuale successivo, nella direzione logica specificata.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
InsertLineBreak()

Inserisce un'interruzione di riga nella posizione corrente.

InsertParagraphBreak()

Inserisce un'interruzione di paragrafo nella posizione corrente.

InsertTextInRun(String)

Inserisce il testo specificato nell'elemento Run del testo nella posizione corrente.

IsInSameDocument(TextPointer)

Indica se la posizione specificata si trova nello stesso contenitore di testo della posizione corrente.

MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Questo tipo o membro supporta l'infrastruttura Windows Presentation Foundation (WPF) e non deve essere usato direttamente dal codice.

Si applica a

Vedi anche