Freigeben über


TextPointer Klasse

Definition

Stellt eine Position in einem FlowDocument oder TextBlock dar.

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
Vererbung
TextPointer

Beispiele

Im folgenden Beispiel wird veranschaulicht, wie Sie eine TextPointer Position direkt innerhalb des ersten Run Elements in einem angegebenen Textcontainer finden.

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

Im folgenden Beispiel wird ein einfacher Suchalgorithmus mithilfe von TextPointer Facilities implementiert.

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

Hinweise

Die TextPointer -Klasse führt die folgende Terminologie ein:

  • Position: Inhärent zeigt ein TextPointer immer auf eine Position im Inhalt. Solche Positionen fallen entweder zwischen Zeichen im Inhalt oder zwischen Flussinhaltselementtags, die die Struktur für den Inhalt definieren.

  • Aktuelle Position: Da ein TextPointer immer eine Position angibt und viele der Vorgänge, die über eine TextPointer ausgeführt werden können, relativ zur Position sind, auf die TextPointerderzeit von verwiesen wird, ist es sinnvoll, einfach auf die von einer TextPointer angegebene Position als aktuelle Position zu verweisen.

  • Einfügeposition: Eine Einfügeposition ist eine Position, an der neue Inhalte hinzugefügt werden können, ohne semantische Regeln für den zugeordneten Inhalt zu brechen. In der Praxis befindet sich eine Einfügeposition an einer beliebigen Stelle im Inhalt, an der ein Caret positioniert werden kann. Ein Beispiel für eine gültige TextPointer Position, die keine Einfügeposition ist, ist die Position zwischen zwei benachbarten Paragraph Tags (also zwischen dem schließenden Tag des vorherigen Absatzes und dem öffnenden Tag des nächsten Absatzes).

  • Symbol: Für Vorgänge TextPointer , die Symbole umfassen, wird eines der folgenden Elemente als Symbol betrachtet:

    • Ein öffnendes oder schließendes Tag für ein TextElement Element.

    • Ein UIElement Element, das in einem InlineUIContainer oder BlockUIContainerenthalten ist. Beachten Sie, dass ein UIElement solches Symbol immer genau als ein Symbol gezählt wird; alle zusätzlichen Inhalte oder Elemente, die von enthalten UIElement sind, werden nicht als Symbole gezählt.

    • Jedes 16-Bit-Unicode-Zeichen innerhalb eines Textelements Run .

  • Textcontainer: Ein Textcontainer ist das Element, das den ultimativen Rahmen für den verfügbaren Flussinhalt bildet. Die durch einen TextPointer always angegebene Position fällt in einen Textcontainer. Derzeit muss ein Textcontainer entweder ein FlowDocument oder ein TextBlocksein. Im Allgemeinen werden Vorgänge zwischen TextPointer Instanzen in verschiedenen Textcontainern nicht unterstützt.

  • Dokument: Der Inhalt in einem Textcontainer wird als Dokument bezeichnet, wie in der IsInSameDocument Methode und den DocumentStart Eigenschaften und DocumentEnd .

Die TextPointer -Klasse soll die Durchquerung und Bearbeitung von Inhalten erleichtern, die durch Windows Presentation Foundation -Flussinhaltselemente (WPF) dargestellt werden. Im Allgemeinen leiten solche Elemente von abTextElement. Zu den vorgängen, die dies erleichtern, TextPointer gehören die folgenden:

  • Führen Sie einen Ordnungsvergleich der aktuellen Position mit einer zweiten angegebenen Position durch. Weitere Informationen finden Sie in der CompareTo -Methode.

  • Bestimmen Sie den Inhaltstyp neben der aktuellen Position in einer angegebenen Richtung. Weitere Informationen finden Sie unter GetPointerContext Methode und TextPointerContext Enumeration.

  • Rufen Sie die TextElement Bereiche ab, die an der aktuellen Position angrenzen oder angrenzen. Siehe Paragraph und die GetAdjacentElement -Methode.

  • Rufen Sie den Textcontainer ab, der den Bereich für das aktuelle Dokument enthält. Weitere Informationen finden Sie unter der Parent-Eigenschaft.

  • Ruft eine angegebene Anzahl von Zeichen vor oder nach der aktuellen Position ab. Weitere Informationen finden Sie in der GetTextInRun -Methode.

  • Fügen Sie eine Zeichenfolge an der aktuellen Position ein. Weitere Informationen finden Sie in der InsertTextInRun -Methode.

  • Suchen sie nach Zeilengrenzen im Inhalt. Weitere Informationen finden Sie unter GetLineStartPosition Methode und IsAtLineStartPosition Eigenschaft.

  • Übersetzen zwischen TextPointer Positionen und Symboloffsets in Inhalte. Sehen Sie sich die GetOffsetToPosition Methoden und GetPositionAtOffset an.

  • Führen Sie visuelle Treffertests durch, indem Sie zwischen einer Position und einer TextPointerPoint relativen Koordinate übersetzen.

  • Suchen Sie eine in der Nähe befindliche Einfügeposition, oder überprüfen Sie, ob es sich bei der aktuellen Position um eine Einfügeposition handelt. Sehen Sie sich die GetInsertionPosition Methoden und GetNextInsertionPosition die -Eigenschaft an IsAtInsertionPosition .

Die Position und LogicalDirection die durch ein TextPointer Objekt angegebene Position sind unveränderlich. Wenn Inhalt bearbeitet oder geändert wird, ändert sich die durch eine TextPointer angegebene Position nicht relativ zum umgebenden Text, sondern der Offset dieser Position vom Anfang des Inhalts wird entsprechend angepasst, um die neue relative Position im Inhalt widerzuspiegeln. Ein TextPointer Beispiel, das eine Position am Anfang eines bestimmten Absatzes angibt, zeigt weiterhin auf den Anfang dieses Absatzes, auch wenn Inhalt vor oder nach dem Absatz eingefügt oder gelöscht wird.

Die TextPointer -Klasse stellt keine öffentlichen Konstruktoren bereit. Eine Instanz von TextPointer wird mit Eigenschaften oder Methoden anderer Objekte (einschließlich anderer TextPointer Objekte) erstellt. Die folgende Liste enthält einige Beispiele für Methoden und Eigenschaften, die eine TextPointererstellen und zurückgeben. Diese Liste ist nicht vollständig:

Eigenschaften

DocumentEnd

Ruft im der aktuellen Position zugeordneten Textcontainer am Ende des Inhalts einen TextPointer ab.

DocumentStart

Ruft im der aktuellen Position zugeordneten Textcontainer am Anfang des Inhalts einen TextPointer ab.

HasValidLayout

Ruft einen Wert ab, mit dem angegeben wird, ob der der aktuellen Position zugeordnete Textcontainer über ein gültiges (aktuelles) Layout verfügt.

IsAtInsertionPosition

Ruft einen Wert ab, mit dem angegeben wird, ob die aktuelle Position eine Einfügeposition ist.

IsAtLineStartPosition

Ruft einen Wert ab, mit dem angegeben wird, ob sich die aktuelle Position am Anfang einer Zeile befindet.

LogicalDirection

Ruft die der aktuellen Position zugeordnete logische Richtung ab, mit der der aktuellen Position zugeordneter Inhalt unterschieden werden kann.

Paragraph

Ruft den Absatz ab, mit dem ggf. die aktuelle Position festgelegt wird.

Parent

Ruft das logische übergeordnete Element ab, mit dem die aktuelle Position festgelegt wird.

Methoden

CompareTo(TextPointer)

Führt einen Ordinalvergleich der angegebenen Positionen des aktuellen TextPointer und eines anderen TextPointer aus.

DeleteTextInRun(Int32)

Löscht die angegebene Anzahl von Zeichen ab der Position, die vom aktuellen TextPointer angegeben wird.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetAdjacentElement(LogicalDirection)

Gibt ggf. das Element zurück, das in der angegebenen logischen Richtung an den aktuellen TextPointer grenzt.

GetCharacterRect(LogicalDirection)

Gibt ein umgebendes Feld (Rect) für Inhalt zurück, der in der angegebenen logischen Richtung an den aktuellen TextPointer grenzt.

GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetInsertionPosition(LogicalDirection)

Gibt in der angegebenen logischen Richtung an der nächsten Einfügeposition einen TextPointer zurück.

GetLineStartPosition(Int32)

Gibt einen TextPointer auf den Anfang einer Zeile zurück, die relativ zum aktuellen TextPointer angegeben wird.

GetLineStartPosition(Int32, Int32)

Gibt einen TextPointer auf den Anfang einer Zeile zurück, die relativ zum aktuellen TextPointer angegeben wird, und gibt an, wie viele Zeilen übersprungen wurden.

GetNextContextPosition(LogicalDirection)

Gibt einen Zeiger auf das nächste Symbol in der angegebenen logischen Richtung zurück.

GetNextInsertionPosition(LogicalDirection)

Gibt in der angegebenen logischen Richtung an der nächsten Einfügeposition einen TextPointer zurück.

GetOffsetToPosition(TextPointer)

Gibt die Anzahl der Symbole zwischen dem aktuellen TextPointer und einem weiteren bestimmten TextPointer zurück.

GetPointerContext(LogicalDirection)

Gibt für den Inhalt neben dem aktuellen TextPointer in der angegebenen logischen Richtung einen Kategorieindikator zurück.

GetPositionAtOffset(Int32)

Gibt einen TextPointer auf die Position zurück, die in Symbolen durch den ab dem Anfang des aktuellen TextPointer bestimmten Offset angegeben wird.

GetPositionAtOffset(Int32, LogicalDirection)

Gibt einen TextPointer auf die Position zurück, die in Symbolen durch den ab dem Anfang des aktuellen TextPointer bestimmten Offset und in der angegebenen Richtung angegeben wird.

GetTextInRun(LogicalDirection)

Gibt eine Zeichenfolge zurück, die Text enthält, der sich in der angegebenen logischen Richtung neben dem aktuellen TextPointer befindet.

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

Kopiert die angegebene maximale Anzahl von Zeichen aus benachbartem Text in der angegebenen Richtung in ein vom Aufrufer bereitgestelltes Zeichenarray.

GetTextRunLength(LogicalDirection)

Gibt in der angegebenen logischen Richtung die Anzahl der Unicode-Zeichen zwischen dem aktuellen TextPointer und dem nächsten Nicht-Text-Symbol zurück.

GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
InsertLineBreak()

Fügt an der aktuellen Position einen Zeilenumbruch ein.

InsertParagraphBreak()

Fügt an der aktuellen Position einen Absatzwechsel ein.

InsertTextInRun(String)

Fügt den angegebenen Text an der aktuellen Position in den Run des Texts ein.

IsInSameDocument(TextPointer)

Gibt an, ob sich die angegebene Position im gleichen Textcontainer wie die aktuelle Position befindet.

MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

Dieser Typ oder dieses Mitglied unterstützt die Windows Presentation Foundation-Infrastruktur (WPF) und ist nicht für die direkte Verwendung im Code vorgesehen.

Gilt für:

Weitere Informationen