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 trouver une position juste à l’intérieur du premier élément Run dans 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 installations.

// 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 classe TextPointer présente la terminologie suivante :

  • Position : intrinsèquement, une TextPointer pointe toujours vers une position dans le contenu. Ces positions sont comprises entre les caractères du contenu ou entre les balises d’élément de contenu de flux qui définissent la structure du contenu.

  • Position actuelle - Étant donné qu’un TextPointer indique toujours une position, et parce que de nombreuses opérations pouvant être effectuées par un TextPointer sont relatives à la position actuellement pointée par le TextPointer, il est logique de simplement faire référence à la position indiquée par un TextPointer comme position actuelle.

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

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

    • Balise ouvrante ou fermante pour un élément TextElement.

    • Élément UIElement contenu dans un InlineUIContainer ou un BlockUIContainer. Notez qu’une telle UIElement est toujours comptée comme un symbole exactement unique ; tout contenu ou élément supplémentaire contenu par l'UIElement n’est pas comptabilisé comme symbole.

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

  • Conteneur de texte : un conteneur de texte est l’élément qui forme la bordure ultime du contenu de flux à la main ; la position indiquée par un TextPointer se trouve toujours dans un conteneur de texte. Actuellement, un conteneur de texte doit être un FlowDocument ou un TextBlock. En règle générale, les opérations entre TextPointer instances dans différents conteneurs de texte ne sont pas prises en charge.

  • Document : le contenu d’un conteneur de texte est appelédocument , comme dans la méthode et les propriétés et .

La classe TextPointer est destinée à faciliter la traversée et la manipulation du contenu représenté par les éléments de contenu de flux 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 :

  • Effectuez une comparaison ordinale de la position actuelle avec une deuxième position spécifiée. Consultez la méthode CompareTo.

  • Déterminez le type de contenu adjacent à la position actuelle dans une direction spécifiée. Consultez la méthode GetPointerContext et l’énumération TextPointerContext.

  • Obtenez l'TextElement que les étendues ou qui sont adjacentes à la position actuelle. Consultez Paragraph et la méthode GetAdjacentElement.

  • Obtenez le conteneur de texte qui étend le document actif. Consultez la propriété Parent.

  • Obtenez un nombre spécifié de caractères précédents ou suivant la position actuelle. Consultez la méthode GetTextInRun.

  • Insérez une chaîne de caractères à la position actuelle. Consultez la méthode InsertTextInRun.

  • Recherchez des limites de ligne dans le contenu. Consultez la méthode GetLineStartPosition et la propriété IsAtLineStartPosition.

  • Traduisez entre les positions TextPointer et les décalages de symboles en contenu. Consultez les méthodes GetOffsetToPosition et GetPositionAtOffset.

  • Effectuez des tests de positionnement visuel en effectuant une traduction entre une position de TextPointer et une Point représentant des coordonnées relatives.

  • Recherchez une position d’insertion à proximité ou vérifiez si la position actuelle est une position d’insertion. Consultez les méthodes GetInsertionPosition et GetNextInsertionPosition et la propriété IsAtInsertionPosition.

La position et LogicalDirection indiquées par un objet TextPointer 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 depuis le début du contenu est ajusté de façon à refléter la nouvelle position relative dans le contenu. Par exemple, un TextPointer qui indique une position au début d’un paragraphe donné continue de pointer vers le début de ce paragraphe, même lorsque le contenu est inséré ou supprimé avant ou après le paragraphe.

La classe TextPointer ne fournit aucun constructeur public. Une instance de TextPointer est créée à l’aide de propriétés ou de méthodes d’autres objets (y compris d’autres objets TextPointer). 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 une TextPointer à la fin du contenu dans le conteneur de texte associé à la position actuelle.

DocumentStart

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

HasValidLayout

Obtient une valeur qui indique si le conteneur de texte associé à la position actuelle a une disposition valide (up-to-date).

IsAtInsertionPosition

Obtient une valeur qui indique si la position actuelle est une position d’insertion.

IsAtLineStartPosition

Obtient une valeur qui indique 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 qui étend la position actuelle, le cas échéant.

Parent

Obtient le parent logique qui étend la position actuelle.

Méthodes

CompareTo(TextPointer)

Effectue une comparaison ordinale entre les positions spécifiées par le TextPointer actuel et une deuxième TextPointerspécifiée.

DeleteTextInRun(Int32)

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

Equals(Object)

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

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

Retourne l’élément, le cas échéant, qui borde la TextPointer actuelle dans la direction logique spécifiée.

GetCharacterRect(LogicalDirection)

Retourne une zone englobante (Rect) pour le contenu qui borde la TextPointer actuelle dans la direction logique spécifiée.

GetHashCode()

Sert de fonction de hachage par défaut.

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

Retourne une TextPointer à la position d’insertion la plus proche dans la direction logique spécifiée.

GetLineStartPosition(Int32, Int32)

Retourne un TextPointer au début d’une ligne spécifiée par rapport au TextPointeractuel et indique le nombre de lignes ignorées.

GetLineStartPosition(Int32)

Retourne un TextPointer au début d’une ligne spécifiée par rapport au TextPointeractuel.

GetNextContextPosition(LogicalDirection)

Retourne un pointeur vers le symbole suivant dans la direction logique spécifiée.

GetNextInsertionPosition(LogicalDirection)

Retourne une TextPointer à la position d’insertion suivante dans la direction logique spécifiée.

GetOffsetToPosition(TextPointer)

Retourne le nombre de symboles entre la TextPointer actuelle et une seconde TextPointerspécifiée.

GetPointerContext(LogicalDirection)

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

GetPositionAtOffset(Int32, LogicalDirection)

Retourne une TextPointer à la position indiquée par le décalage spécifié, dans les symboles, à partir du début de la TextPointer actuelle et dans la direction spécifiée.

GetPositionAtOffset(Int32)

Retourne une TextPointer à la position indiquée par le décalage spécifié, dans les symboles, à partir du début du TextPointeractuel.

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

Copie le nombre maximal spécifié de caractères de n’importe quel texte adjacent dans la direction spécifiée dans un tableau de caractères fourni par l’appelant.

GetTextInRun(LogicalDirection)

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

GetTextRunLength(LogicalDirection)

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

GetType()

Obtient la Type de l’instance actuelle.

(Hérité de Object)
InsertLineBreak()

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

InsertParagraphBreak()

Insère un saut 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 se trouve dans le même conteneur de texte que la position actuelle.

MemberwiseClone()

Crée une copie superficielle du Objectactuel.

(Hérité de Object)
ToString()

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

S’applique à

Voir aussi