TextPointer Classe

Definição

Representa uma posição dentro de um FlowDocument ou 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
Herança
TextPointer

Exemplos

O exemplo seguinte demonstra como usar a TextPointer para encontrar uma posição logo dentro do primeiro Run elemento num recipiente 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

O exemplo seguinte implementa um algoritmo de localização simplista usando TextPointer facilidades.

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

Observações

A TextPointer aula introduz a seguinte terminologia:

  • Posição - Inerentemente, a TextPointer aponta sempre para uma posição no conteúdo. Tais posições situam-se entre caracteres no conteúdo, ou entre etiquetas de elementos de conteúdo de fluxo que definem a estrutura do conteúdo.

  • Posição Atual - Como a TextPointer indica sempre uma posição, e porque muitas das operações que podem ser realizadas através de a TextPointer são relativas à posição atualmente apontada pelo TextPointer, faz sentido simplesmente referir-se à posição indicada por a TextPointer como a posição atual.

  • Posição de Inserção - Uma posição de inserção é uma posição onde pode ser adicionado novo conteúdo sem violar quaisquer regras semânticas para o conteúdo associado. Na prática, uma posição de inserção é em qualquer ponto do conteúdo onde um caret possa ser posicionado. Um exemplo de posição válida TextPointer que não é uma posição de inserção é a posição entre duas etiquetas adjacentes Paragraph (isto é, entre a etiqueta de encerramento do parágrafo anterior e a etiqueta de abertura do parágrafo seguinte).

  • Símbolo - Para efeitos de TextPointer operações que envolvem símbolos, qualquer um dos seguintes elementos é considerado um símbolo:

    • Uma etiqueta de abertura ou fecho para um TextElement elemento.

    • Um UIElement elemento contido dentro de um InlineUIContainer ou BlockUIContainer. Note-se que tal é UIElement sempre contado como exatamente um símbolo; qualquer conteúdo adicional ou elemento contido por o UIElement não é contado como símbolos.

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

  • Recipiente de Texto - Um contentor de texto é o elemento que forma a fronteira final para o conteúdo do fluxo em questão; A posição indicada por A TextPointer situa-se sempre dentro de um contentor de texto. Atualmente, um recipiente de texto deve ser ou a FlowDocument ou um TextBlock. De um modo geral, operações entre TextPointer instâncias em diferentes contentores de texto não são suportadas.

  • Documento - O conteúdo num contentor de texto é referido como documento, como no IsInSameDocument método e nas DocumentStart propriedades e.DocumentEnd

A classe TextPointer destina-se a facilitar a travessia e manipulação de conteúdos representados por elementos de conteúdo de fluxo Windows Presentation Foundation (WPF); em geral, tais elementos derivam de TextElement. Algumas das operações que TextPointer facilitam incluem as seguintes:

A posição e LogicalDirection indicada por um TextPointer objeto são imutáveis. Quando o conteúdo é editado ou modificado, a posição indicada por a TextPointer não muda em relação ao texto circundante; em vez disso, o deslocamento dessa posição em relação ao início do conteúdo é ajustado em conformidade para refletir a nova posição relativa no conteúdo. Por exemplo, um TextPointer que indica uma posição no início de um dado parágrafo continua a apontar para o início desse parágrafo mesmo quando o conteúdo é inserido ou eliminado antes ou depois do parágrafo.

A TextPointer classe não disponibiliza construtores públicos. Uma instância de TextPointer é criada usando propriedades ou métodos de outros objetos (incluindo outros TextPointer objetos). A lista seguinte apresenta alguns exemplos de métodos e propriedades que criam e retornam um TextPointer. Esta lista não é exaustiva:

Propriedades

Name Description
DocumentEnd

Aparece um TextPointer no final do conteúdo no contentor de texto associado à posição atual.

DocumentStart

Recebe um TextPointer no início do conteúdo no contentor de texto associado à posição atual.

HasValidLayout

Recebe um valor que indica se o contentor de texto associado à posição atual tem um layout válido (up-to-data).

IsAtInsertionPosition

Obtém um valor que indica se a posição atual é uma posição de inserção.

IsAtLineStartPosition

Obtém um valor que indica se a posição atual está no início de uma linha.

LogicalDirection

Obtém a direção lógica associada à posição atual, que é usada para desambiguar o conteúdo associado à posição atual.

Paragraph

Recebe o parágrafo que define a posição atual, se houver.

Parent

Obtém o pai lógico que delimita a posição atual.

Métodos

Name Description
CompareTo(TextPointer)

Realiza uma comparação ordinal entre as posições especificadas pela corrente TextPointer e uma segunda especificada TextPointer.

DeleteTextInRun(Int32)

Elimina o número especificado de caracteres da posição indicada pelo atual TextPointer.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetAdjacentElement(LogicalDirection)

Devolve o elemento, se existir, que faz fronteira com a corrente TextPointer na direção lógica especificada.

GetCharacterRect(LogicalDirection)

Devolve uma caixa delimitadora (Rect) para o conteúdo que faz fronteira com a corrente TextPointer na direção lógica especificada.

GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetInsertionPosition(LogicalDirection)

Devolve a TextPointer à posição de inserção mais próxima na direção lógica especificada.

GetLineStartPosition(Int32, Int32)

Devolve a TextPointer ao início de uma linha especificada em relação à corrente TextPointer, e reporta quantas linhas foram saltadas.

GetLineStartPosition(Int32)

Devolve a TextPointer ao início de uma linha que é especificada relativamente à corrente TextPointer.

GetNextContextPosition(LogicalDirection)

Devolve um ponteiro para o símbolo seguinte na direção lógica especificada.

GetNextInsertionPosition(LogicalDirection)

Retorna a TextPointer para a próxima posição de inserção na direção lógica especificada.

GetOffsetToPosition(TextPointer)

Devolve a contagem de símbolos entre a corrente TextPointer e um segundo especificado TextPointer.

GetPointerContext(LogicalDirection)

Devolve um indicador de categoria para o conteúdo adjacente à corrente TextPointer na direção lógica especificada.

GetPositionAtOffset(Int32, LogicalDirection)

Devolve a TextPointer à posição indicada pelo deslocamento especificado, em símbolos, desde o início da corrente TextPointer e na direção especificada.

GetPositionAtOffset(Int32)

Devolve a TextPointer à posição indicada pelo deslocamento especificado, em símbolos, a partir do início da corrente TextPointer.

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

Copia o número máximo especificado de caracteres de qualquer texto adjacente na direção especificada para um array de caracteres fornecido pelo chamador.

GetTextInRun(LogicalDirection)

Devolve uma cadeia contendo qualquer texto adjacente à corrente TextPointer na direção lógica especificada.

GetTextRunLength(LogicalDirection)

Devolve o número de caracteres Unicode entre o símbolo atual TextPointer e o próximo símbolo não textual, na direção lógica especificada.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
InsertLineBreak()

Insere uma quebra de linha na posição atual.

InsertParagraphBreak()

Insere uma quebra de parágrafo na posição atual.

InsertTextInRun(String)

Insere o texto especificado no texto Run na posição atual.

IsInSameDocument(TextPointer)

Indica se a posição especificada está no mesmo recipiente de texto que a posição atual.

MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
ToString()

Este tipo ou membro suporta a infraestrutura Windows Presentation Foundation (WPF) e não se destina a ser usado diretamente a partir do seu código.

Aplica-se a

Ver também