TextPointer Classe

Definizione

Rappresenta una posizione all'interno di un oggetto FlowDocument o TextBlock.Represents a position within a FlowDocument or 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

Esempi

Nell'esempio seguente viene illustrato come utilizzare un TextPointer oggetto per trovare una posizione solo all'interno del Run primo elemento in un contenitore di testo specificato.The following example demonstrates how to use a TextPointer to find a position just inside of the first Run element in a specified text container.

// 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

L'esempio seguente implementa un algoritmo di ricerca semplicistico usando TextPointer le funzionalità.The following example implements a simplistic find algorithm using TextPointer facilities.

// 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:The TextPointer class introduces the following terminology:

  • Position: intrinsecamente, un TextPointer oggetto punta sempre a una posizione nel contenuto.Position - Inherently, a TextPointer always points to a position in content. 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.Such positions either fall between characters in the content, or between flow content element tags that define structure for the content.

  • Posizione corrente: poiché un TextPointer oggetto indica sempre una posizione e poiché molte delle operazioni che possono essere eseguite tramite un oggetto TextPointer sono relative alla posizione a cui punta TextPointerattualmente, è opportuno fare riferimento semplicemente al posizione indicata da un TextPointer oggetto come posizione corrente.Current Position - Because a TextPointer always indicates a position, and because many of the operations that can be performed through a TextPointer are relative to the position currently pointed to by the TextPointer, it makes sense to simply refer to the position indicated by a TextPointer as the current position.

  • Posizione di inserimento: una posizione di inserimento è una posizione in cui è possibile aggiungere nuovi contenuti senza suddividere le regole semantiche per il contenuto associato.Insertion Position - An insertion position is a position where new content may be added without breaking any semantic rules for the associated content. In pratica, una posizione di inserimento è in qualsiasi punto del contenuto in cui è possibile posizionare un accento circonflesso.In practice, an insertion position is anywhere in content where a caret may be positioned. Un esempio di una posizione TextPointer valida che non è una posizione di inserimento è la posizione tra due Paragraph tag adiacenti, ovvero tra il tag di chiusura del paragrafo precedente e il tag di apertura del paragrafo successivo.An example of a valid TextPointer position that is not an insertion position is the position between two adjacent Paragraph tags (that is, between the closing tag of the preceding paragraph and the opening tag of the next paragraph).

  • Symbol: per le TextPointer operazioni che prevedono l'uso di simboli, uno dei seguenti viene considerato un simbolo:Symbol - For the purposes of TextPointer operations that involve symbols, any of the following is considered to be a symbol:

    • Tag di apertura o di chiusura per TextElement un elemento.An opening or closing tag for a TextElement element.

    • Elemento contenuto all'interno di InlineUIContainer un oggetto o BlockUIContainer. UIElementA UIElement element contained within an InlineUIContainer or BlockUIContainer. Si noti che tale UIElement valore viene sempre conteggiato come un solo simbolo; eventuali elementi o contenuti aggiuntivi contenuti UIElement in non vengono conteggiati come simboli.Note that such a UIElement is always counted as exactly one symbol; any additional content or elements contained by the UIElement are not counted as symbols.

    • Ogni carattere a 16 UnicodeUnicode bit all'interno di un Run elemento di testo.Each 16-bit UnicodeUnicode character inside of a text Run element.

  • Contenitore di testo: un contenitore di testo è l'elemento che costituisce il bordo finale per il contenuto del flusso a mano; la posizione indicata da un TextPointer oggetto rientra sempre all'interno di un contenitore di testo.Text Container - A text container is the element that forms the ultimate border for the flow content at hand; the position indicated by a TextPointer always falls within a text container. Attualmente, un contenitore di testo deve essere un FlowDocument o un TextBlock.Currently, a text container must be either a FlowDocument or a TextBlock. In generale, le operazioni TextPointer tra le istanze in contenitori di testo diversi non sono supportate.Generally speaking, operations between TextPointer instances in different text containers are not supported.

  • Documento: il contenuto di un contenitore di testo viene definito documento, come nel IsInSameDocument metodo e le DocumentStart proprietà e DocumentEnd .Document - The content in a text container is referred to as a document, as in the IsInSameDocument method and the DocumentStart and DocumentEnd properties.

La TextPointer classe è progettata per semplificare l'attraversamento e la manipolazione del contenuto rappresentato dagli Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) elementi di contenuto del flusso. in generale, tali elementi derivano da TextElement.The TextPointer class is intended to facilitate traversal and manipulation of content that is represented by Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) flow content elements; in general, such elements derive from TextElement. Di seguito sono riportate alcune delle operazioni che TextPointer semplificano:Some of the operations that TextPointer facilitates include the following:

La posizione e LogicalDirection indicata da un TextPointer oggetto non sono modificabili.The position and LogicalDirection indicated by a TextPointer object are immutable. Quando il contenuto viene modificato o modificato, la posizione indicata da TextPointer un oggetto non viene modificata in relazione al testo circostante; piuttosto l'offset di tale posizione dall'inizio del contenuto viene regolato in modo corrispondente per riflettere la nuova posizione relativa in contenuto.When content is edited or modified, the position indicated by a TextPointer does not change relative to the surrounding text; rather the offset of that position from the beginning of content is adjusted correspondingly to reflect the new relative position in content. Ad esempio, un TextPointer oggetto che indica una posizione all'inizio di un dato paragrafo continua a puntare all'inizio di tale paragrafo anche quando il contenuto viene inserito o eliminato prima o dopo il paragrafo.For example, a TextPointer that indicates a position at the beginning of a given paragraph continues to point to the beginning of that paragraph even when content is inserted or deleted before or after the paragraph.

La TextPointer classe non fornisce costruttori pubblici.The TextPointer class does not provide any public constructors. Un'istanza di TextPointer viene creata utilizzando le proprietà o i metodi di altri oggetti, inclusi TextPointer altri oggetti.An instance of TextPointer is created by using properties or methods of other objects (including other TextPointer objects). Nell'elenco seguente vengono forniti alcuni esempi di metodi e proprietà che creano e restituiscono TextPointerun oggetto.The following list provides a few examples of methods and properties that create and return a TextPointer. Questo elenco non è esaustivo:This list is not exhaustive:

Proprietà

DocumentEnd

Ottiene un oggetto TextPointer alla fine del contenuto nel contenitore di testo associato alla posizione corrente.Gets a TextPointer at the end of content in the text container associated with the current position.

DocumentStart

Ottiene un oggetto TextPointer all'inizio del contenuto nel contenitore di testo associato alla posizione corrente.Gets a TextPointer at the beginning of content in the text container associated with the current position.

HasValidLayout

Ottiene un valore che indica se il contenitore di testo associato alla posizione corrente ha un layout valido (aggiornato).Gets a value that indicates whether the text container associated with the current position has a valid (up-to-date) layout.

IsAtInsertionPosition

Ottiene un valore che indica se la posizione corrente è una posizione di inserimento.Gets a value that indicates whether the current position is an insertion position.

IsAtLineStartPosition

Ottiene un valore che indica se la posizione corrente è all'inizio di una riga.Gets a value that indicates whether the current position is at the beginning of a line.

LogicalDirection

Ottiene la direzione logica associata alla posizione corrente e utilizzata per risolvere le ambiguità del contenuto associato alla posizione corrente.Gets the logical direction associated with the current position which is used to disambiguate content associated with the current position.

Paragraph

Ottiene il paragrafo che fornisce l'ambito alla posizione corrente, se presente.Gets the paragraph that scopes the current position, if any.

Parent

Ottiene il padre logico che fornisce l'ambito alla posizione corrente.Gets the logical parent that scopes the current position.

Metodi

CompareTo(TextPointer)

Esegue un confronto ordinale tra le posizioni specificate dall'oggetto TextPointer corrente e un secondo oggetto TextPointer specificato.Performs an ordinal comparison between the positions specified by the current TextPointer and a second specified TextPointer.

DeleteTextInRun(Int32)

Elimina il numero di caratteri specificato dalla posizione indicata dall'oggetto TextPointer corrente.Deletes the specified number of characters from the position indicated by the current TextPointer.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

(Ereditato da Object)
GetAdjacentElement(LogicalDirection)

Restituisce l'elemento, se presente, che delimita l'oggetto TextPointer corrente nella direzione logica specificata.Returns the element, if any, that borders the current TextPointer in the specified logical direction.

GetCharacterRect(LogicalDirection)

Restituisce un riquadro delimitatore del testo (Rect) per il contenuto che delimita l'oggetto TextPointer corrente nella direzione logica specificata.Returns a bounding box (Rect) for content that borders the current TextPointer in the specified logical direction.

GetHashCode()

Funge da funzione hash predefinita.Serves as the default hash function.

(Ereditato da Object)
GetInsertionPosition(LogicalDirection)

Restituisce un oggetto TextPointer nella posizione di inserimento più vicina, nella direzione logica specificata.Returns a TextPointer to the closest insertion position in the specified logical direction.

GetLineStartPosition(Int32)

Restituisce un oggetto TextPointer all'inizio di una riga specificata in relazione all'oggetto TextPointer corrente.Returns a TextPointer to the beginning of a line that is specified relative to the current TextPointer.

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.Returns a TextPointer to the beginning of a line that is specified relative to the current TextPointer, and reports how many lines were skipped.

GetNextContextPosition(LogicalDirection)

Restituisce un puntatore al simbolo successivo nella direzione logica specificata.Returns a pointer to the next symbol in the specified logical direction.

GetNextInsertionPosition(LogicalDirection)

Restituisce un oggetto TextPointer nella posizione di inserimento successiva nella direzione logica specificata.Returns a TextPointer to the next insertion position in the specified logical direction.

GetOffsetToPosition(TextPointer)

Restituisce il conteggio dei simboli tra l'oggetto TextPointer corrente e un secondo oggetto TextPointer specificato.Returns the count of symbols between the current TextPointer and a second specified TextPointer.

GetPointerContext(LogicalDirection)

Restituisce un indicatore di categoria per il contenuto adiacente all'oggetto TextPointer corrente nella direzione logica specificata.Returns a category indicator for the content adjacent to the current TextPointer in the specified logical direction.

GetPositionAtOffset(Int32)

Restituisce un oggetto TextPointer nella posizione indicata dall'offset specificato, in simboli, dall'inizio dell'oggetto TextPointer corrente.Returns a TextPointer to the position indicated by the specified offset, in symbols, from the beginning of the current TextPointer.

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.Returns a TextPointer to the position indicated by the specified offset, in symbols, from the beginning of the current TextPointer and in the specified direction.

GetTextInRun(LogicalDirection)

Restituisce una stringa contenente il testo adiacente all'oggetto TextPointer corrente nella direzione logica specificata.Returns a string containing any text adjacent to the current TextPointer in the specified logical direction.

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.Copies the specified maximum number of characters from any adjacent text in the specified direction into a caller-supplied character array.

GetTextRunLength(LogicalDirection)

Restituisce il numero di caratteri Unicode tra l'oggetto TextPointer corrente e il simbolo non testuale successivo, nella direzione logica specificata.Returns the number of Unicode characters between the current TextPointer and the next non-text symbol, in the specified logical direction.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

(Ereditato da Object)
InsertLineBreak()

Inserisce un'interruzione di riga nella posizione corrente.Inserts a line break at the current position.

InsertParagraphBreak()

Inserisce un'interruzione di paragrafo nella posizione corrente.Inserts a paragraph break at the current position.

InsertTextInRun(String)

Inserisce il testo specificato nell'elemento Run del testo nella posizione corrente.Inserts the specified text into the text Run at the current position.

IsInSameDocument(TextPointer)

Indica se la posizione specificata si trova nello stesso contenitore di testo della posizione corrente.Indicates whether the specified position is in the same text container as the current position.

MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Ereditato da Object)
ToString()

Questo tipo o membro supporta l'infrastruttura Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) e non deve essere usato direttamente dal codice.This type or member supports the Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) infrastructure and is not intended to be used directly from your code.

Si applica a

Vedi anche