TextPointer Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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 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:
Realizar uma comparação ordinal da posição atual com uma segunda posição especificada. Veja o CompareTo método.
Determine o tipo de conteúdo adjacente à posição atual numa direção especificada. Veja o método e TextPointerContext a GetPointerContext enumeração.
Obtenha o TextElement que seja visível ou adjacente à posição atual. Veja Paragraph e o GetAdjacentElement método.
Arranja o contentor de texto que faz o âmbito do documento atual. Vê a Parent propriedade.
Obtém um número especificado de caracteres antes ou depois da posição atual. Veja o GetTextInRun método.
Insira uma sequência de caracteres na posição atual. Veja o InsertTextInRun método.
Encontra limites de linhas no conteúdo. Veja o método e IsAtLineStartPosition a GetLineStartPosition propriedade.
Traduzir entre TextPointer posições e deslocamentos de símbolos em conteúdo. Veja os GetOffsetToPosition métodos e GetPositionAtOffset .
Realize testes de acertos visuais traduzindo entre uma TextPointer posição e uma Point representando coordenadas relativas.
Encontre uma posição de inserção próxima, ou verifique se a posição atual é uma posição de inserção. Veja os GetInsertionPosition métodos e GetNextInsertionPosition a IsAtInsertionPosition propriedade.
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:
A partir de um TextElement: ContentStart, ContentEnd, ElementStart, e ElementEnd.
De um TextBlock (contentor de texto): ContentStart, ContentEnd, e GetPositionFromPoint.
De um FlowDocument (contentor de texto): ContentStart, e ContentEnd
A partir de um existente TextPointer: DocumentStart, DocumentEnd, GetNextInsertionPosition, , e GetPositionAtOffset.
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. |