TextPointer Klass

Definition

Representerar en position inom en FlowDocument eller 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
Arv
TextPointer

Exempel

I följande exempel visas hur du använder en TextPointer för att hitta en position precis inuti det första Run elementet i en angiven textcontainer.

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

I följande exempel implementeras en förenklad sökalgoritm med hjälp av TextPointer anläggningar.

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

Kommentarer

Klassen TextPointer introducerar följande terminologi:

  • Position – i sig pekar en TextPointer alltid på en position i innehållet. Sådana positioner hamnar antingen mellan tecken i innehållet eller mellan flödesinnehållselementtaggar som definierar strukturen för innehållet.

  • Aktuell position – Eftersom en TextPointer alltid indikerar en position, och eftersom många av de åtgärder som kan utföras via en TextPointer är relativa till den position som för närvarande pekas på av TextPointer, är det klokt att helt enkelt referera till den position som anges av en TextPointer som den aktuella positionen.

  • Infogningsposition – En infogningsposition är en position där nytt innehåll kan läggas till utan att bryta mot några semantiska regler för det associerade innehållet. I praktiken finns en insättningsposition var som helst i innehåll där en caret kan placeras. Ett exempel på en giltig TextPointer position som inte är en infogningsposition är positionen mellan två intilliggande Paragraph taggar (det vill säga mellan den avslutande taggen i föregående stycke och den inledande taggen i nästa stycke).

  • Symbol – För TextPointer åtgärder som omfattar symboler anses något av följande vara en symbol:

    • En inledande eller avslutande tagg för ett TextElement element.

    • Ett UIElement element som finns i en InlineUIContainer eller BlockUIContainer. Observera att en UIElement sådan alltid räknas som exakt en symbol. Eventuella ytterligare innehåll eller element som ingår i UIElement räknas inte som symboler.

    • Varje 16-bitars Unicode-tecken inuti ett textelement Run .

  • Textcontainer – en textcontainer är det element som utgör den ultimata kantlinjen för det aktuella flödesinnehållet. positionen som anges av en TextPointer alltid faller inom en textcontainer. För närvarande måste en textcontainer vara antingen en FlowDocument eller en TextBlock. Generellt sett stöds inte åtgärder mellan TextPointer instanser i olika textcontainrar.

  • Dokument – Innehållet i en textcontainer kallas för ett dokument, som i IsInSameDocument metoden och DocumentStart egenskaperna och DocumentEnd .

Klassen TextPointer är avsedd att underlätta bläddering och manipulering av innehåll som representeras av Windows Presentation Foundation (WPF) flödesinnehållselement. I allmänhet härleds sådana element från TextElement. Några av de åtgärder som TextPointer underlättar omfattar följande:

Positionen och LogicalDirection som anges av ett TextPointer objekt är oföränderlig. När innehållet redigeras eller ändras ändras inte den position som anges av en TextPointer i förhållande till den omgivande texten. Snarare justeras förskjutningen av den positionen från början av innehållet på motsvarande sätt för att återspegla den nya relativa positionen i innehållet. Till exempel fortsätter en TextPointer som anger en position i början av ett visst stycke att peka på början av det stycket även när innehållet infogas eller tas bort före eller efter stycket.

Klassen TextPointer tillhandahåller inga offentliga konstruktorer. En instans av TextPointer skapas med hjälp av egenskaper eller metoder för andra objekt (inklusive andra TextPointer objekt). Följande lista innehåller några exempel på metoder och egenskaper som skapar och returnerar en TextPointer. Den här listan är inte fullständig:

Egenskaper

Name Description
DocumentEnd

Hämtar en TextPointer i slutet av innehållet i textcontainern som är associerad med den aktuella positionen.

DocumentStart

Hämtar en TextPointer i början av innehållet i textcontainern som är associerad med den aktuella positionen.

HasValidLayout

Hämtar ett värde som anger om textcontainern som är associerad med den aktuella positionen har en giltig layout (up-to-date).

IsAtInsertionPosition

Hämtar ett värde som anger om den aktuella positionen är en insättningsposition.

IsAtLineStartPosition

Hämtar ett värde som anger om den aktuella positionen är i början av en rad.

LogicalDirection

Hämtar den logiska riktningen som är associerad med den aktuella positionen som används för att skilja innehåll som är associerat med den aktuella positionen.

Paragraph

Hämtar det stycke som omfångsbegränsar den aktuella positionen, om det finns.

Parent

Hämtar den logiska överordnad som omfångsbegränsar den aktuella positionen.

Metoder

Name Description
CompareTo(TextPointer)

Utför en ordningsjämförelse mellan de positioner som anges av den aktuella TextPointer och en andra angiven TextPointer.

DeleteTextInRun(Int32)

Tar bort det angivna antalet tecken från den position som anges av den aktuella TextPointer.

Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
GetAdjacentElement(LogicalDirection)

Returnerar det eventuella elementet som kanter den aktuella TextPointer i den angivna logiska riktningen.

GetCharacterRect(LogicalDirection)

Returnerar en avgränsningsruta (Rect) för innehåll som gränsar till den aktuella TextPointer i den angivna logiska riktningen.

GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetInsertionPosition(LogicalDirection)

Returnerar en TextPointer till närmaste insättningsposition i den angivna logiska riktningen.

GetLineStartPosition(Int32, Int32)

Returnerar en TextPointer till början av en rad som har angetts i förhållande till den aktuella TextPointeroch rapporterar hur många rader som hoppades över.

GetLineStartPosition(Int32)

Returnerar en TextPointer till början av en rad som har angetts i förhållande till den aktuella TextPointer.

GetNextContextPosition(LogicalDirection)

Returnerar en pekare till nästa symbol i den angivna logiska riktningen.

GetNextInsertionPosition(LogicalDirection)

Returnerar en TextPointer till nästa infogningsposition i den angivna logiska riktningen.

GetOffsetToPosition(TextPointer)

Returnerar antalet symboler mellan den aktuella TextPointer och en andra angiven TextPointer.

GetPointerContext(LogicalDirection)

Returnerar en kategoriindikator för innehållet intill den aktuella TextPointer i den angivna logiska riktningen.

GetPositionAtOffset(Int32, LogicalDirection)

Returnerar en TextPointer till den position som anges av den angivna förskjutningen, i symboler, från början av strömmen TextPointer och i den angivna riktningen.

GetPositionAtOffset(Int32)

Returnerar en TextPointer till den position som anges av den angivna förskjutningen, i symboler, från början av den aktuella TextPointer.

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

Kopierar det angivna maximala antalet tecken från valfri intilliggande text i den angivna riktningen till en teckenmatris som tillhandahålls av anroparen.

GetTextInRun(LogicalDirection)

Returnerar en sträng som innehåller text intill den aktuella TextPointer i den angivna logiska riktningen.

GetTextRunLength(LogicalDirection)

Returnerar antalet Unicode-tecken mellan den aktuella TextPointer och nästa icke-textsymbol i den angivna logiska riktningen.

GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
InsertLineBreak()

Infogar en radbrytning vid den aktuella positionen.

InsertParagraphBreak()

Infogar en styckebrytning vid den aktuella positionen.

InsertTextInRun(String)

Infogar den angivna texten i texten Run vid den aktuella positionen.

IsInSameDocument(TextPointer)

Anger om den angivna positionen finns i samma textcontainer som den aktuella positionen.

MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
ToString()

Den här typen eller medlemmen stöder infrastrukturen för Windows Presentation Foundation (WPF) och är inte avsedd att användas direkt från koden.

Gäller för

Se även