TextPointer Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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
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:
Execute uma comparação ordinal da posição atual com uma segunda posição especificada. Consulte o método CompareTo.
Determine o tipo de conteúdo adjacente à posição atual em uma direção especificada. Consulte o método GetPointerContext e a enumeração TextPointerContext.
Obtenha o TextElement que escopos ou é adjacente à posição atual. Consulte Paragraph e o método GetAdjacentElement.
Obtenha o contêiner de texto que define o escopo do documento atual. Consulte a propriedade Parent.
Obtenha um número especificado de caracteres anterior ou seguindo a posição atual. Consulte o método GetTextInRun.
Insira uma cadeia de caracteres na posição atual. Consulte o método InsertTextInRun.
Encontre limites de linha no conteúdo. Consulte o método GetLineStartPosition e a propriedade IsAtLineStartPosition.
Traduza entre TextPointer posições e deslocamentos de símbolo para o conteúdo. Consulte os métodos GetOffsetToPosition e GetPositionAtOffset.
Execute o teste de clique visual traduzindo entre uma posição de TextPointer e uma Point que representa coordenadas relativas.
Localize uma posição de inserção próxima ou verifique se a posição atual é uma posição de inserção. Consulte os métodos GetInsertionPosition e GetNextInsertionPosition e a propriedade IsAtInsertionPosition.
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:
De um TextElement: ContentStart, ContentEnd, ElementStarte ElementEnd.
De um TextBlock (contêiner de texto): ContentStart, ContentEnde GetPositionFromPoint.
De um FlowDocument (contêiner de texto): ContentStarte ContentEnd
De um TextPointerexistente: DocumentStart, DocumentEnd, GetNextInsertionPositione GetPositionAtOffset.
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. |