TextPointer Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Representa una posición dentro de un FlowDocument o 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
- Herencia
Ejemplos
En el ejemplo siguiente se muestra cómo usar un TextPointer para buscar una posición justo dentro del primer elemento Run de un contenedor 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
En el ejemplo siguiente se implementa un algoritmo de búsqueda simplista mediante TextPointer instalaciones.
// 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
Comentarios
La clase TextPointer presenta la terminología siguiente:
Posición: inherentemente, un TextPointer siempre apunta a una posición de en el contenido. Estas posiciones se encuentran entre caracteres del contenido o entre etiquetas de elemento de contenido de flujo que definen la estructura del contenido.
Posición actual: dado que un TextPointer siempre indica una posición y, debido a que muchas de las operaciones que se pueden realizar a través de un TextPointer son relativas a la posición actualmente apuntada por el TextPointer, tiene sentido simplemente hacer referencia a la posición indicada por un TextPointer como la posición actual.
Posición de inserción: una posición de inserción es una posición en la que se puede agregar contenido nuevo sin interrumpir ninguna regla semántica para el contenido asociado. En la práctica, una posición de inserción se encuentra en cualquier parte del contenido donde se puede colocar un símbolo de intercalación. Un ejemplo de una posición TextPointer válida que no es una posición de inserción es la posición entre dos etiquetas de Paragraph adyacentes (es decir, entre la etiqueta de cierre del párrafo anterior y la etiqueta de apertura del párrafo siguiente).
Símbolo: para las operaciones de TextPointer que implican símbolos, cualquiera de los siguientes se considera un símbolo :
Etiqueta de apertura o cierre para un elemento TextElement.
Elemento UIElement contenido en un InlineUIContainer o BlockUIContainer. Tenga en cuenta que tal UIElement siempre se cuenta como un símbolo exactamente; ningún contenido o elemento adicional contenido de la UIElement no se cuentan como símbolos.
Cada carácter Unicode de 16 bits dentro de un elemento text Run.
Contenedor de texto: contenedor de texto es el elemento que forma el borde final del contenido del flujo a mano; la posición indicada por un TextPointer siempre se encuentra dentro de un contenedor de texto. Actualmente, un contenedor de texto debe ser un FlowDocument o un TextBlock. Por lo general, no se admiten las operaciones entre instancias de TextPointer en contenedores de texto diferentes.
Documento: el contenido de un contenedor de texto se conoce como documento, como en el método IsInSameDocument y las propiedades DocumentStart y DocumentEnd.
La clase TextPointer está pensada para facilitar el recorrido y la manipulación del contenido representado por elementos de contenido de flujo de Windows Presentation Foundation (WPF); en general, estos elementos derivan de TextElement. Algunas de las operaciones que TextPointer facilitan incluyen las siguientes:
Realice una comparación ordinal de la posición actual con una segunda posición especificada. Consulte el método CompareTo.
Determine el tipo de contenido adyacente a la posición actual en una dirección especificada. Consulte el método GetPointerContext y la enumeración TextPointerContext.
Obtenga el TextElement que tiene como ámbito o está adyacente a la posición actual. Consulte Paragraph y el método GetAdjacentElement.
Obtenga el contenedor de texto que limita el documento actual. Consulte la propiedad Parent.
Obtiene un número especificado de caracteres anteriores o después de la posición actual. Consulte el método GetTextInRun.
Inserte una cadena de caracteres en la posición actual. Consulte el método InsertTextInRun.
Busque límites de línea en el contenido. Consulte el método GetLineStartPosition y la propiedad IsAtLineStartPosition.
Traducir entre TextPointer posiciones y desplazamientos de símbolos en contenido. Consulte los métodos GetOffsetToPosition y GetPositionAtOffset.
Realice pruebas de posicionamiento visual mediante la traducción entre una posición de TextPointer y un Point que represente coordenadas relativas.
Busque una posición de inserción cercana o compruebe si la posición actual es una posición de inserción. Vea los métodos GetInsertionPosition y GetNextInsertionPosition y la propiedad IsAtInsertionPosition.
La posición y LogicalDirection indicadas por un objeto TextPointer son inmutables. Cuando el contenido se edita o modifica, la posición indicada por un TextPointer no cambia en relación con el texto circundante; en lugar de que el desplazamiento de esa posición desde el principio del contenido se ajusta correspondientemente para reflejar la nueva posición relativa en el contenido. Por ejemplo, un TextPointer que indica una posición al principio de un párrafo determinado continúa apuntando al principio de ese párrafo incluso cuando el contenido se inserta o elimina antes o después del párrafo.
La clase TextPointer no proporciona ningún constructor público. Se crea una instancia de TextPointer mediante propiedades o métodos de otros objetos (incluidos otros objetos TextPointer). En la lista siguiente se proporcionan algunos ejemplos de métodos y propiedades que crean y devuelven un TextPointer. Esta lista no es exhaustiva:
Desde un TextElement: ContentStart, ContentEnd, ElementStarty ElementEnd.
Desde un TextBlock (contenedor de texto): ContentStart, ContentEndy GetPositionFromPoint.
Desde un FlowDocument (contenedor de texto): ContentStarty ContentEnd
Desde una TextPointerexistente: DocumentStart, DocumentEnd, GetNextInsertionPositiony GetPositionAtOffset.
Propiedades
DocumentEnd |
Obtiene un TextPointer al final del contenido del contenedor de texto asociado a la posición actual. |
DocumentStart |
Obtiene un TextPointer al principio del contenido del contenedor de texto asociado a la posición actual. |
HasValidLayout |
Obtiene un valor que indica si el contenedor de texto asociado a la posición actual tiene un diseño válido (up-to-date). |
IsAtInsertionPosition |
Obtiene un valor que indica si la posición actual es una posición de inserción. |
IsAtLineStartPosition |
Obtiene un valor que indica si la posición actual está al principio de una línea. |
LogicalDirection |
Obtiene la dirección lógica asociada a la posición actual que se usa para desambiguar el contenido asociado a la posición actual. |
Paragraph |
Obtiene el párrafo que limita la posición actual, si existe. |
Parent |
Obtiene el elemento primario lógico que limita la posición actual. |
Métodos
CompareTo(TextPointer) |
Realiza una comparación ordinal entre las posiciones especificadas por el TextPointer actual y un segundo TextPointerespecificado. |
DeleteTextInRun(Int32) |
Elimina el número especificado de caracteres de la posición indicada por el TextPointeractual. |
Equals(Object) |
Determina si el objeto especificado es igual al objeto actual. (Heredado de Object) |
GetAdjacentElement(LogicalDirection) |
Devuelve el elemento, si existe, que bordea el TextPointer actual en la dirección lógica especificada. |
GetCharacterRect(LogicalDirection) |
Devuelve un cuadro de límite (Rect) para el contenido que bordea el TextPointer actual en la dirección lógica especificada. |
GetHashCode() |
Actúa como función hash predeterminada. (Heredado de Object) |
GetInsertionPosition(LogicalDirection) |
Devuelve un TextPointer a la posición de inserción más cercana en la dirección lógica especificada. |
GetLineStartPosition(Int32, Int32) |
Devuelve un TextPointer al principio de una línea especificada en relación con el TextPointeractual e informa del número de líneas que se omitieron. |
GetLineStartPosition(Int32) |
Devuelve un TextPointer al principio de una línea especificada con respecto al TextPointeractual. |
GetNextContextPosition(LogicalDirection) |
Devuelve un puntero al símbolo siguiente en la dirección lógica especificada. |
GetNextInsertionPosition(LogicalDirection) |
Devuelve un TextPointer a la siguiente posición de inserción en la dirección lógica especificada. |
GetOffsetToPosition(TextPointer) |
Devuelve el recuento de símbolos entre el TextPointer actual y un segundo TextPointerespecificado. |
GetPointerContext(LogicalDirection) |
Devuelve un indicador de categoría para el contenido adyacente al TextPointer actual en la dirección lógica especificada. |
GetPositionAtOffset(Int32, LogicalDirection) |
Devuelve un TextPointer a la posición indicada por el desplazamiento especificado, en símbolos, desde el principio del TextPointer actual y en la dirección especificada. |
GetPositionAtOffset(Int32) |
Devuelve un TextPointer a la posición indicada por el desplazamiento especificado, en símbolos, desde el principio del TextPointeractual. |
GetTextInRun(LogicalDirection, Char[], Int32, Int32) |
Copia el número máximo de caracteres especificado de cualquier texto adyacente en la dirección especificada en una matriz de caracteres proporcionado por el autor de la llamada. |
GetTextInRun(LogicalDirection) |
Devuelve una cadena que contiene cualquier texto adyacente al TextPointer actual en la dirección lógica especificada. |
GetTextRunLength(LogicalDirection) |
Devuelve el número de caracteres Unicode entre el TextPointer actual y el siguiente símbolo que no es de texto, en la dirección lógica especificada. |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
InsertLineBreak() |
Inserta un salto de línea en la posición actual. |
InsertParagraphBreak() |
Inserta un salto de párrafo en la posición actual. |
InsertTextInRun(String) |
Inserta el texto especificado en el texto Run en la posición actual. |
IsInSameDocument(TextPointer) |
Indica si la posición especificada está en el mismo contenedor de texto que la posición actual. |
MemberwiseClone() |
Crea una copia superficial del Objectactual. (Heredado de Object) |
ToString() |
Este tipo o miembro admite la infraestructura de Windows Presentation Foundation (WPF) y no está pensado para usarse directamente desde el código. |