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 un TextPointer para buscar una posición justo dentro del primer elemento Run 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 clase TextPointer presenta la terminología siguiente:

  • Posición: inherentemente, un TextPointer siempre apunta a una posición de en el contenido. Estas posiciones se encuentran 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 un TextPointer son relativas a la posición actualmente apuntada por el TextPointer, tiene sentido simplemente hacer referencia a la posición indicada por un TextPointer como la posición actual.

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

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

    • Etiqueta de apertura o cierre para un elemento TextElement.

    • Elemento UIElement contenido en un InlineUIContainer o BlockUIContainer. Tenga en cuenta que tal UIElement siempre se cuenta como un símbolo exactamente; ningún contenido o elemento adicional contenido de la UIElement no se cuentan como símbolos.

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

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

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

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

La posición y LogicalDirection indicadas por un objeto TextPointer 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 lugar de que 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 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 clase TextPointer no proporciona ningún constructor público. Se crea una instancia de TextPointer mediante propiedades o métodos de otros objetos (incluidos otros objetos TextPointer). En la lista siguiente se proporcionan algunos ejemplos de métodos y propiedades que crean y devuelven un TextPointer. Esta lista no es exhaustiva:

Propiedades

DocumentEnd

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

DocumentStart

Obtiene un TextPointer al principio del contenido del 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 (up-to-date).

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 usa para desambiguar el contenido asociado a la posición actual.

Paragraph

Obtiene el párrafo que limita la posición actual, si existe.

Parent

Obtiene el elemento primario lógico que limita la posición actual.

Métodos

CompareTo(TextPointer)

Realiza una comparación ordinal entre las posiciones especificadas por el TextPointer actual y un segundo TextPointerespecificado.

DeleteTextInRun(Int32)

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

Equals(Object)

Determina si el objeto especificado es igual al objeto actual.

(Heredado de Object)
GetAdjacentElement(LogicalDirection)

Devuelve el elemento, si existe, que bordea el TextPointer actual en la dirección lógica especificada.

GetCharacterRect(LogicalDirection)

Devuelve un cuadro de límite (Rect) para el contenido que bordea el TextPointer actual en la dirección lógica especificada.

GetHashCode()

Actúa como función hash predeterminada.

(Heredado de Object)
GetInsertionPosition(LogicalDirection)

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

GetLineStartPosition(Int32, Int32)

Devuelve un TextPointer al principio de una línea especificada en relación con el TextPointeractual e informa del número de líneas que se omitieron.

GetLineStartPosition(Int32)

Devuelve un TextPointer al principio de una línea especificada con respecto al TextPointeractual.

GetNextContextPosition(LogicalDirection)

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

GetNextInsertionPosition(LogicalDirection)

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

GetOffsetToPosition(TextPointer)

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

GetPointerContext(LogicalDirection)

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

GetPositionAtOffset(Int32, LogicalDirection)

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

GetPositionAtOffset(Int32)

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

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

Copia el número máximo de caracteres especificado de cualquier texto adyacente en la dirección especificada en una matriz de caracteres proporcionado por el autor de la llamada.

GetTextInRun(LogicalDirection)

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

GetTextRunLength(LogicalDirection)

Devuelve el número de caracteres Unicode entre el TextPointer actual y el siguiente símbolo que no es de texto, 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 texto Run 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 Objectactual.

(Heredado de Object)
ToString()

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

Se aplica a

Consulte también