Compartilhar via


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 elemento Run 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 classe TextPointer 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 um TextPointer sempre indica uma posição e, como muitas das operações que podem ser executadas por meio de uma TextPointer são relativas à posição atualmente apontada pelo TextPointer, faz sentido simplesmente referir-se à 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 regras semânticas 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 de TextPointer válida que não é uma posição de inserção é a posição entre duas marcas de Paragraph adjacentes (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 operações de TextPointer que envolvem símbolos, qualquer um dos seguintes é considerado um símbolo :

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

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

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

  • Contêiner de Texto – um contêiner de texto é o elemento que forma a borda final para o conteúdo do 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 instâncias de TextPointer em contêineres de texto diferentes.

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

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

A posição e LogicalDirection indicadas por um objeto TextPointer 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 desde o 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 classe TextPointer não fornece construtores públicos. Uma instância de TextPointer é criada usando propriedades ou métodos de outros objetos (incluindo outros objetos TextPointer). A lista a seguir fornece alguns exemplos de métodos e propriedades que criam e retornam um TextPointer. Esta lista não é completa:

Propriedades

DocumentEnd

Obtém um TextPointer no final 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 (up-to-date).

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

Obtém o parágrafo que define o escopo da posição atual, se houver.

Parent

Obtém o pai lógico que define o escopo da posição atual.

Métodos

CompareTo(TextPointer)

Executa uma comparação ordinal entre as posições especificadas pelo TextPointer atual e uma segunda TextPointerespecificada.

DeleteTextInRun(Int32)

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

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetAdjacentElement(LogicalDirection)

Retorna o elemento, se houver, que faz a borda do TextPointer atual na direção lógica especificada.

GetCharacterRect(LogicalDirection)

Retorna uma caixa delimitadora (Rect) para o conteúdo que faz a borda do 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 à posição de inserção mais próxima na direção lógica especificada.

GetLineStartPosition(Int32, Int32)

Retorna uma TextPointer ao início de uma linha especificada em relação ao TextPointeratual e relata quantas linhas foram ignoradas.

GetLineStartPosition(Int32)

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

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 TextPointerespecificado.

GetPointerContext(LogicalDirection)

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

GetPositionAtOffset(Int32, LogicalDirection)

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

GetPositionAtOffset(Int32)

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

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

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

GetTextInRun(LogicalDirection)

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

GetTextRunLength(LogicalDirection)

Retorna o número de caracteres Unicode entre o TextPointer atual e o próximo símbolo 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 está no mesmo contêiner de texto que a posição atual.

MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
ToString()

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

Aplica-se a

Confira também