TextPointer Classe

Définition

Représente une position dans un 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
Héritage
TextPointer

Exemples

L’exemple suivant montre comment utiliser un TextPointer pour rechercher une position juste à l’intérieur du premier Run élément d’un conteneur de texte spécifié.

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

L’exemple suivant implémente un algorithme de recherche simpliste à l’aide de TextPointer fonctionnalités.

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

Remarques

La TextPointer classe présente la terminologie suivante :

  • Position : fondamentalement, un TextPointer pointe toujours vers une position dans le contenu. De tels emplacements se situent entre des caractères dans le contenu ou entre des balises d’élément de contenu de Flow qui définissent la structure du contenu.

  • Position actuelle : étant donné qu’un TextPointer indique toujours une position et que la plupart des opérations qui peuvent être effectuées par TextPointer le biais d’un sont relatives à la position actuellement référencée par le TextPointer , il est logique de faire simplement référence à la position indiquée par un TextPointer comme position actuelle.

  • Position d’insertion : une position d’insertion est une position où un nouveau contenu peut être ajouté sans rompre les règles sémantiques pour le contenu associé. Dans la pratique, une position d’insertion se trouve n’importe où dans le contenu où un point d’insertion peut être positionné. Un exemple d’une TextPointer position valide qui n’est pas une position d’insertion est la position entre deux Paragraph balises adjacentes (c’est-à-dire entre la balise de fermeture du paragraphe précédent et la balise d’ouverture du paragraphe suivant).

  • Symbole-pour les TextPointer opérations qui impliquent des symboles, l’un des éléments suivants est considéré comme un symbole:

    • Balise d’ouverture ou de fermeture d’un TextElement élément.

    • UIElementÉlément contenu dans un InlineUIContainer ou un BlockUIContainer . Notez que ce type UIElement est toujours compté comme un seul symbole ; tout contenu ou élément supplémentaire contenu dans le UIElement n’est pas compté comme des symboles.

    • Chaque caractère Unicode 16 bits à l’intérieur d’un Run élément de texte.

  • Conteneur de texte : un conteneur de texte est l’élément qui forme la bordure finale du contenu dynamique. la position indiquée par un est toujours comprise TextPointer dans un conteneur de texte. À l’heure actuelle, un conteneur de texte doit être un FlowDocument ou un TextBlock . En règle générale, les opérations entre TextPointer des instances dans des conteneurs de texte différents ne sont pas prises en charge.

  • Document-le contenu d’un conteneur de texte est appelé document, comme dans la IsInSameDocument méthode et les DocumentStart DocumentEnd Propriétés et.

la TextPointer classe est destinée à faciliter le parcours et la manipulation de contenu représenté par les éléments de contenu de Windows Presentation Foundation (WPF). en général, ces éléments dérivent de TextElement . Voici quelques-unes des opérations qui TextPointer facilitent les opérations suivantes :

La position et l' LogicalDirection indication d’un TextPointer objet sont immuables. Lorsque le contenu est modifié ou modifié, la position indiquée par un TextPointer ne change pas par rapport au texte environnant. au lieu de cela, le décalage de cette position à partir du début du contenu est ajusté en conséquence pour refléter la nouvelle position relative dans le contenu. Par exemple, un TextPointer qui indique qu’une position au début d’un paragraphe donné continue à pointer vers le début de ce paragraphe même si le contenu est inséré ou supprimé avant ou après le paragraphe.

La TextPointer classe ne fournit pas de constructeurs publics. Une instance de TextPointer est créée à l’aide de propriétés ou de méthodes d’autres objets (y compris d’autres TextPointer objets). La liste suivante fournit quelques exemples de méthodes et de propriétés qui créent et retournent un TextPointer . Cette liste n’est pas exhaustive :

Propriétés

DocumentEnd

Obtient un TextPointer à la fin du contenu dans le conteneur de texte associé à la position actuelle.

DocumentStart

Obtient un TextPointer au début du contenu dans le conteneur de texte associé à la position actuelle.

HasValidLayout

Obtient une valeur indiquant si le conteneur de texte associé à la position actuelle a une disposition valide (mise à jour).

IsAtInsertionPosition

Obtient une valeur indiquant si la position actuelle est une position d'insertion.

IsAtLineStartPosition

Obtient une valeur indiquant si la position actuelle est au début d'une ligne.

LogicalDirection

Obtient la direction logique associée à la position actuelle utilisée pour lever l'ambiguïté du contenu associé à la position actuelle.

Paragraph

Obtient le paragraphe dans la portée de la position actuelle, s'il en est.

Parent

Obtient le parent logique portant sur la position actuelle.

Méthodes

CompareTo(TextPointer)

Effectuer une comparaison ordinale entre les positions spécifiées par le TextPointer actuel et une seconde spécifié par TextPointer.

DeleteTextInRun(Int32)

Supprime le nombre spécifié de caractères de la position indiquée par le TextPointeractuel.

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
GetAdjacentElement(LogicalDirection)

Renvoie l'élément, s'il en est, qui limite le TextPointer actuel dans la direction logique spécifiée.

GetCharacterRect(LogicalDirection)

Renvoie un cadre englobant (Rect) pour du contenu en bordure du TextPointer actuel dans la direction logique spécifiée.

GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetInsertionPosition(LogicalDirection)

Renvoie un TextPointer à la position d'insertion la plus proche dans la direction logique spécifiée.

GetLineStartPosition(Int32)

Renvoie un TextPointer au début d'une ligne spécifiée par rapport au TextPointer actuel.

GetLineStartPosition(Int32, Int32)

Renvoie un TextPointer au début d'une ligne spécifiée par rapport au TextPointeractuel, et renseigne sur le nombre de lignes ignorées.

GetNextContextPosition(LogicalDirection)

Renvoie un pointeur vers le prochain symbole dans la direction logique spécifiée.

GetNextInsertionPosition(LogicalDirection)

Renvoie un TextPointer à la prochaine position d'insertion dans la direction logique spécifiée.

GetOffsetToPosition(TextPointer)

Renvoie le compte de symboles entre le TextPointer actuel et un second TextPointerspécifié.

GetPointerContext(LogicalDirection)

Renvoie un indicateur de catégorie pour le contenu adjacent au TextPointer actuel dans la direction logique spécifiée.

GetPositionAtOffset(Int32)

Renvoie un TextPointer à la position indiquée par l'offset spécifié, dans les symboles, à partir du début du TextPointeractuel.

GetPositionAtOffset(Int32, LogicalDirection)

Renvoie un TextPointer à la position indiquée par l'offset spécifié, dans les symboles, à partir du début du TextPointeractuel et dans la direction spécifiée.

GetTextInRun(LogicalDirection)

Renvoie une chaîne contenant tout texte adjacent au TextPointer actuel dans la direction logique spécifiée.

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

Copie le nombre maximal spécifié de caractères à partir de tout texte adjacent dans la direction spécifiée dans un tableau de caractères fourni par un appelant.

GetTextRunLength(LogicalDirection)

Renvoie le nombre de caractères Unicode entre le TextPointer actuel et le prochain symbole de non-texte, dans la direction logique spécifiée.

GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
InsertLineBreak()

Insère un saut de ligne à la position actuelle.

InsertParagraphBreak()

Insère un arrêt de paragraphe à la position actuelle.

InsertTextInRun(String)

Insère le texte spécifié dans le texte Run à la position actuelle.

IsInSameDocument(TextPointer)

Indique si la position spécifiée est dans le même conteneur de texte que la position actuelle.

MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ToString()

Ce type ou ce membre prend en charge l’infrastructure Windows Presentation Foundation (WPF), et n’est pas destiné à être utilisé directement à partir de votre code.

S’applique à

Voir aussi