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 a seguir demonstra como usar um TextPointer para localizar uma posição dentro do primeiro Run elemento em um contêiner 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 a seguir implementa um algoritmo de localização simplista usando TextPointer instalações.

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

Comentários

A TextPointer classe apresenta a seguinte terminologia:

  • Posição – inerentemente, um TextPointer sempre aponta para uma posição no conteúdo. Essas posições se enquadram entre caracteres no conteúdo ou entre marcas de elemento de conteúdo de fluxo que definem a estrutura para o conteúdo.

  • Posição atual – como sempre TextPointer indica uma posição e, como muitas das operações que podem ser executadas por meio de um TextPointer são relativas à posição apontada atualmente pelo TextPointer, faz sentido simplesmente fazer referência à posição indicada por um TextPointer como a posição atual.

  • Posição de Inserção - Uma posição de inserção é uma posição em que o novo conteúdo pode ser adicionado sem quebrar nenhuma regra semântica para o conteúdo associado. Na prática, uma posição de inserção está em qualquer lugar no conteúdo em que um cursor pode ser posicionado. Um exemplo de uma posição válida TextPointer que não é uma posição de inserção é a posição entre duas marcas adjacentes Paragraph (ou seja, entre a marca de fechamento do parágrafo anterior e a marca de abertura do próximo parágrafo).

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

    • Uma marca de abertura ou fechamento para um TextElement elemento.

    • Um UIElement elemento contido em um InlineUIContainer ou BlockUIContainer. Observe que esse UIElement tipo é sempre contado como exatamente um símbolo; qualquer conteúdo adicional ou elementos contidos pelo UIElement não são contados como símbolos.

    • Cada caractere Unicode de 16 bits dentro de um elemento de texto Run .

  • Contêiner de Texto – Um contêiner de texto é o elemento que forma a borda final para o conteúdo de fluxo em questão; a posição indicada por um TextPointer sempre se enquadra em um contêiner de texto. Atualmente, um contêiner de texto deve ser um FlowDocument ou um TextBlock. De modo geral, não há suporte para operações entre TextPointer instâncias em contêineres de texto diferentes.

  • Documento - O conteúdo em um contêiner de texto é conhecido como um documento, como no IsInSameDocument método e nas DocumentStart propriedades e DocumentEnd no método.

A TextPointer classe destina-se a facilitar a passagem e a manipulação do conteúdo representado por elementos de conteúdo de fluxo Windows Presentation Foundation (WPF). Em geral, esses elementos derivam de TextElement. Algumas das operações que TextPointer facilitam incluem o seguinte:

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

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

Propriedades

DocumentEnd

Obtém um TextPointer no fim do conteúdo no contêiner de texto associado à posição atual.

DocumentStart

Obtém um TextPointer no início do conteúdo no contêiner de texto associado à posição atual.

HasValidLayout

Obtém um valor que indica se o contêiner de texto associado à posição atual tem um layout válido (atualizado).

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 usada para resolver a ambiguidade do conteúdo associado à posição atual.

Paragraph

Obtém o parágrafo que tem como escopo a posição atual, se houver.

Parent

Obtém o pai lógico que tem como escopo a posição atual.

Métodos

CompareTo(TextPointer)

Executa uma comparação ordinal entre as posições especificadas pelo TextPointer atual e um segundo TextPointer especificado.

DeleteTextInRun(Int32)

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

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetAdjacentElement(LogicalDirection)

Retorna o elemento, se houver, que limita o TextPointer atual na direção lógica especificada.

GetCharacterRect(LogicalDirection)

Retorna uma caixa delimitadora (Rect) para o conteúdo que limita o TextPointer atual na direção lógica especificada.

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetInsertionPosition(LogicalDirection)

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

GetLineStartPosition(Int32)

Retorna um TextPointer para o início de uma linha especificada em relação ao TextPointer atual.

GetLineStartPosition(Int32, Int32)

Retorna um TextPointer para o início de uma linha especificada em relação ao TextPointer atual e informa quantas linhas foram ignoradas.

GetNextContextPosition(LogicalDirection)

Retorna um ponteiro para o próximo símbolo na direção lógica especificada.

GetNextInsertionPosition(LogicalDirection)

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

GetOffsetToPosition(TextPointer)

Retorna a contagem de símbolos entre o TextPointer atual e um segundo TextPointer especificado.

GetPointerContext(LogicalDirection)

Retorna um indicador de categoria para o conteúdo adjacente ao TextPointer atual na direção lógica especificada.

GetPositionAtOffset(Int32)

Retorna um TextPointer à posição indicada pelo deslocamento especificado nos símbolos, desde o início do TextPointer atual.

GetPositionAtOffset(Int32, LogicalDirection)

Retorna um TextPointer à posição indicada pelo deslocamento especificado nos símbolos, desde o início do TextPointer atual e na direção especificada.

GetTextInRun(LogicalDirection)

Retorna uma cadeia de caracteres que contém qualquer texto adjacente ao TextPointer atual na direção lógica especificada.

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

Copia o número máximo especificado de caracteres de qualquer texto adjacente na direção especificada para uma matriz de caracteres fornecida pelo cliente.

GetTextRunLength(LogicalDirection)

Retorna o número de caracteres Unicode entre o TextPointer atual e o próximo símbolo que não é texto, 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 Run de texto na posição atual.

IsInSameDocument(TextPointer)

Indica se a posição especificada estiver no mesmo contêiner de texto que a posição atual.

MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Este tipo ou membro dá suporte à infraestrutura do WPF (Windows Presentation Foundation) e não se destina a ser usado diretamente do código.

Aplica-se a

Confira também