TextPointer Clase

Definición

Representa una posición dentro de un 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
Herencia
TextPointer

Ejemplos

En el ejemplo siguiente se muestra cómo usar para TextPointer buscar una posición justo dentro del primer Run elemento de un contenedor de texto especificado.

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

En el ejemplo siguiente se implementa un algoritmo de búsqueda simplista mediante TextPointer instalaciones.

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

Comentarios

La TextPointer clase presenta la siguiente terminología:

  • Posición: inherentemente, un TextPointer siempre apunta a una posición en el contenido. Estas posiciones se dividen entre caracteres del contenido o entre etiquetas de elemento de contenido de flujo que definen la estructura del contenido.

  • Posición actual: dado que un TextPointer siempre indica una posición, y debido a que muchas de las operaciones que se pueden realizar a través de son TextPointer relativas a la posición que apunta actualmente el TextPointer, tiene sentido simplemente hacer referencia a la posición indicada por un TextPointer elemento como la posición actual.

  • Posición de inserción: una posición de inserción es una posición donde se puede agregar nuevo contenido sin interrumpir ninguna regla semántica para el contenido asociado. En la práctica, una posición de inserción se encuentra en cualquier lugar del contenido donde se puede colocar un símbolo de intercalación. Un ejemplo de una posición válida TextPointer que no es una posición de inserción es la posición entre dos etiquetas adyacentes Paragraph (es decir, entre la etiqueta de cierre del párrafo anterior y la etiqueta de apertura del párrafo siguiente).

  • Símbolo: para los fines de TextPointer las operaciones que implican símbolos, cualquiera de los siguientes se considera un símbolo:

    • Una etiqueta de apertura o cierre para un TextElement elemento.

    • Un UIElement elemento contenido en un InlineUIContainer objeto o BlockUIContainer. Tenga en cuenta que este tipo UIElement siempre se cuenta como exactamente un símbolo; cualquier contenido o elementos adicionales contenidos por no UIElement se cuentan como símbolos.

    • Cada carácter Unicode de 16 bits dentro de un elemento de texto Run .

  • Contenedor de texto: un contenedor de texto es el elemento que forma el borde final para el contenido del flujo a mano; la posición indicada por un TextPointer siempre está dentro de un contenedor de texto. Actualmente, un contenedor de texto debe ser o FlowDocument .TextBlock Por lo general, no se admiten operaciones entre TextPointer instancias de contenedores de texto diferentes.

  • Documento: el contenido de un contenedor de texto se conoce como un documento, como en el IsInSameDocument método y las DocumentStart propiedades y DocumentEnd .

La TextPointer clase está pensada para facilitar el recorrido y la manipulación del contenido representado por Windows Presentation Foundation (WPF) elementos de contenido de flujo; en general, estos elementos derivan de TextElement. Algunas de las operaciones que TextPointer facilitan incluyen lo siguiente:

La posición y LogicalDirection la indica un TextPointer objeto son inmutables. Cuando el contenido se edita o modifica, la posición indicada por un TextPointer no cambia en relación con el texto circundante; en su lugar, el desplazamiento de esa posición desde el principio del contenido se ajusta correspondientemente para reflejar la nueva posición relativa en el contenido. Por ejemplo, un TextPointer objeto que indica una posición al principio de un párrafo determinado continúa apuntando al principio de ese párrafo incluso cuando el contenido se inserta o elimina antes o después del párrafo.

La TextPointer clase no proporciona ningún constructor público. Se crea una instancia de TextPointer mediante propiedades o métodos de otros objetos (incluidos otros TextPointer objetos). En la lista siguiente se proporcionan algunos ejemplos de métodos y propiedades que crean y devuelven .TextPointer Esta lista no es exhaustiva:

Propiedades

DocumentEnd

Obtiene TextPointer al final del contenido en el contenedor de texto asociado a la posición actual.

DocumentStart

Obtiene TextPointer al principio del contenido en el contenedor de texto asociado a la posición actual.

HasValidLayout

Obtiene un valor que indica si el contenedor de texto asociado a la posición actual tiene un diseño válido (actualizado).

IsAtInsertionPosition

Obtiene un valor que indica si la posición actual es una posición de inserción.

IsAtLineStartPosition

Obtiene un valor que indica si la posición actual está al principio de una línea.

LogicalDirection

Obtiene la dirección lógica asociada a la posición actual que se utiliza para eliminar la ambigüedad del contenido asociado a la posición actual.

Paragraph

Obtiene el párrafo que establece el ámbito de la posición actual, si lo hay.

Parent

Obtiene el elemento primario lógico que establece el ámbito de la posición actual.

Métodos

CompareTo(TextPointer)

Realiza una comparación de ordinales entre las posiciones especificadas por el TextPointer actual y un segundo TextPointer especificado.

DeleteTextInRun(Int32)

Elimina el número de caracteres especificado de la posición indicada por el TextPointer actual.

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetAdjacentElement(LogicalDirection)

Devuelve el elemento, en caso de que exista, que limita al TextPointer actual en la dirección lógica especificada.

GetCharacterRect(LogicalDirection)

Devuelve un rectángulo de selección (Rect) para el contenido que limita el TextPointer actual en la dirección lógica especificada.

GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetInsertionPosition(LogicalDirection)

Devuelve TextPointer a la posición de inserción más cercana en la dirección lógica especificada.

GetLineStartPosition(Int32)

Devuelve TextPointer al principio de una línea que se especifica con respecto al TextPointer actual.

GetLineStartPosition(Int32, Int32)

Devuelve TextPointer al principio de una línea que se especifica con respecto al TextPointer actual e informa sobre el número de líneas omitidas.

GetNextContextPosition(LogicalDirection)

Devuelve un puntero al símbolo siguiente en la dirección lógica especificada.

GetNextInsertionPosition(LogicalDirection)

Devuelve TextPointer a la posición de inserción siguiente en la dirección lógica especificada.

GetOffsetToPosition(TextPointer)

Devuelve el recuento de símbolos entre el TextPointer actual y un segundo TextPointer especificado.

GetPointerContext(LogicalDirection)

Devuelve un indicador de categoría para el contenido adyacente al TextPointer actual en la dirección lógica especificada.

GetPositionAtOffset(Int32)

Devuelve TextPointer a la posición indicada por el desplazamiento especificado, en símbolos, a partir del principio del TextPointer actual.

GetPositionAtOffset(Int32, LogicalDirection)

Devuelve TextPointer a la posición indicada por el desplazamiento especificado, en símbolos, a partir del principio del TextPointer actual y en la dirección especificada.

GetTextInRun(LogicalDirection)

Devuelve una cadena que contiene cualquier texto adyacente al TextPointer actual en la dirección lógica especificada.

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

Copia el número de caracteres máximo especificado desde cualquier texto adyacente en la dirección especificada en una matriz de caracteres proporcionada por un llamador.

GetTextRunLength(LogicalDirection)

Devuelve el número de caracteres Unicode entre el TextPointer actual y el símbolo de no texto siguiente, en la dirección lógica especificada.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
InsertLineBreak()

Inserta un salto de línea en la posición actual.

InsertParagraphBreak()

Inserta un salto de párrafo en la posición actual.

InsertTextInRun(String)

Inserta el texto especificado en el Run del texto en la posición actual.

IsInSameDocument(TextPointer)

Indica si la posición especificada está en el mismo contenedor de texto que la posición actual.

MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ToString()

Este tipo o miembro admite la infraestructura de Windows Presentation Foundation (WPF) y no está pensado para su uso directo desde el código.

Se aplica a

Consulte también