TextPointer Klasa

Definicja

Reprezentuje pozycję w obiekcie FlowDocument lub 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
Dziedziczenie
TextPointer

Przykłady

W poniższym przykładzie pokazano, jak za pomocą elementu TextPointer znaleźć pozycję tuż wewnątrz pierwszego Run elementu w określonym kontenerze tekstowym.

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

Poniższy przykład implementuje uproszczony algorytm znajdowania przy użyciu TextPointer obiektów.

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

Uwagi

Klasa TextPointer wprowadza następującą terminologię:

  • Pozycja — z założenia zawsze TextPointer wskazuje pozycję w zawartości. Takie pozycje dzielą się między znakami w zawartości lub między tagami elementów zawartości przepływu definiujących strukturę zawartości.

  • Pozycja bieżąca — ponieważ TextPointer zawsze wskazuje pozycję, a ponieważ wiele operacji, które można wykonać za pomocą TextPointer elementu, jest względem pozycji aktualnie wskazywanej przez TextPointerelement , warto po prostu odwoływać się do pozycji wskazanej przez TextPointerpozycję jako bieżącą pozycję.

  • Pozycja wstawiania — pozycja wstawiania to pozycja, w której można dodać nową zawartość bez przerywania żadnych reguł semantycznych dla skojarzonej zawartości. W praktyce pozycja wstawiania znajduje się w dowolnym miejscu zawartości, w której daszek może być umieszczony. Przykładem prawidłowej TextPointer pozycji, która nie jest pozycją wstawiania, jest pozycja między dwoma sąsiednimi Paragraph tagami (czyli między tagiem zamykającym poprzedniego akapitu a tagiem otwierającym następnego akapitu).

  • Symbol — do celów TextPointer operacji, które obejmują symbole, którykolwiek z poniższych jest uważany za symbol:

    • Tag otwierający lub zamykający TextElement dla elementu.

    • Element UIElement zawarty w elemecie InlineUIContainer lub BlockUIContainer. Należy pamiętać, że taki element UIElement jest zawsze liczone jako dokładnie jeden symbol. Każda dodatkowa zawartość lub elementy zawarte w obiekcie UIElement nie są liczone jako symbole.

    • Każdy 16-bitowy znak Unicode wewnątrz elementu tekstowego Run .

  • Kontener tekstu — kontener tekstowy jest elementem, który stanowi ostateczne obramowanie zawartości przepływu; pozycja wskazywana TextPointer przez element zawsze mieści się w kontenerze tekstowym. Obecnie kontener tekstowy musi być kontenerem FlowDocumentTextBlocklub . Mówiąc ogólnie, operacje między wystąpieniami TextPointer w różnych kontenerach tekstowych nie są obsługiwane.

  • Document — zawartość w kontenerze tekstowym jest określana jako dokument, jak w metodzie IsInSameDocument i właściwościach DocumentStart i DocumentEnd .

Klasa TextPointer ma na celu ułatwienie przechodzenia i manipulowania zawartością reprezentowaną przez elementy zawartości przepływu Windows Presentation Foundation (WPF), a ogólnie rzecz biorąc, takie elementy pochodzą z TextElement. Niektóre operacje, które TextPointer ułatwiają wykonywanie następujących czynności:

Pozycja i LogicalDirection wskazywana przez TextPointer obiekt są niezmienne. Gdy zawartość jest edytowana lub modyfikowana, pozycja wskazywana przez element TextPointer nie zmienia się względem otaczającego tekstu; przesunięcie tej pozycji od początku zawartości jest dostosowywane odpowiednio w celu odzwierciedlenia nowej pozycji względnej w zawartości. Na przykład element TextPointer wskazujący położenie na początku danego akapitu nadal wskazuje początek tego akapitu nawet wtedy, gdy zawartość jest wstawiana lub usuwana przed akapitem lub po nim.

Klasa TextPointer nie udostępnia żadnych publicznych konstruktorów. Wystąpienie klasy TextPointer jest tworzone przy użyciu właściwości lub metod innych obiektów (w tym innych TextPointer obiektów). Poniższa lista zawiera kilka przykładów metod i właściwości, które tworzą i zwracają element TextPointer. Ta lista nie jest wyczerpująca:

Właściwości

DocumentEnd

Pobiera element TextPointer na końcu zawartości w kontenerze tekstowym skojarzonym z bieżącym położeniem.

DocumentStart

Pobiera element TextPointer na początku zawartości w kontenerze tekstowym skojarzonym z bieżącym położeniem.

HasValidLayout

Pobiera wartość wskazującą, czy kontener tekstowy skojarzony z bieżącym położeniem ma prawidłowy (aktualny) układ.

IsAtInsertionPosition

Pobiera wartość wskazującą, czy bieżące położenie jest pozycją wstawiania.

IsAtLineStartPosition

Pobiera wartość wskazującą, czy bieżąca pozycja znajduje się na początku wiersza.

LogicalDirection

Pobiera kierunek logiczny skojarzony z bieżącym położeniem, które służy do uściślania zawartości skojarzonej z bieżącym położeniem.

Paragraph

Pobiera akapit, który określa zakres bieżącego położenia, jeśli istnieje.

Parent

Pobiera element nadrzędny logiczny, który określa zakres bieżącego położenia.

Metody

CompareTo(TextPointer)

Wykonuje porównanie porządkowe między pozycjami określonymi przez bieżącą TextPointer a drugą określoną wartością TextPointer.

DeleteTextInRun(Int32)

Usuwa określoną liczbę znaków z pozycji wskazanej przez bieżący TextPointerelement .

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetAdjacentElement(LogicalDirection)

Zwraca element , jeśli istnieje, który obramuje bieżący TextPointer w określonym kierunku logicznym.

GetCharacterRect(LogicalDirection)

Zwraca pole ograniczenia (Rect) dla zawartości, która obramuje bieżący TextPointer w określonym kierunku logicznym.

GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetInsertionPosition(LogicalDirection)

Zwraca wartość do TextPointer najbliższej pozycji wstawiania w określonym kierunku logicznym.

GetLineStartPosition(Int32)

Zwraca wartość na TextPointer początku wiersza określonego względem bieżącego TextPointerelementu .

GetLineStartPosition(Int32, Int32)

Zwraca wartość na TextPointer początku wiersza, który jest określony względem bieżącego TextPointerelementu , i zgłasza, ile wierszy zostało pominiętych.

GetNextContextPosition(LogicalDirection)

Zwraca wskaźnik do następnego symbolu w określonym kierunku logicznym.

GetNextInsertionPosition(LogicalDirection)

Zwraca wartość a TextPointer do następnego położenia wstawiania w określonym kierunku logicznym.

GetOffsetToPosition(TextPointer)

Zwraca liczbę symboli między bieżącą TextPointer a drugą określoną wartością TextPointer.

GetPointerContext(LogicalDirection)

Zwraca wskaźnik kategorii dla zawartości sąsiadującej z prądem TextPointer w określonym kierunku logicznym.

GetPositionAtOffset(Int32)

Zwraca wartość typu TextPointer do pozycji wskazanej przez określone przesunięcie w symbolach od początku bieżącego TextPointerelementu .

GetPositionAtOffset(Int32, LogicalDirection)

Zwraca wartość typu TextPointer do pozycji wskazanej przez określone przesunięcie w symbolach od początku bieżącego TextPointer i w określonym kierunku.

GetTextInRun(LogicalDirection)

Zwraca ciąg zawierający dowolny tekst przylegający do bieżącego TextPointer w określonym kierunku logicznym.

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

Kopiuje określoną maksymalną liczbę znaków z dowolnego sąsiedniego tekstu w określonym kierunku do tablicy znaków dostarczonej przez obiekt wywołujący.

GetTextRunLength(LogicalDirection)

Zwraca liczbę znaków Unicode między bieżącym TextPointer i następnym symbolem innym niż tekst w określonym kierunku logicznym.

GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
InsertLineBreak()

Wstawia podział wiersza w bieżącej pozycji.

InsertParagraphBreak()

Wstawia podział akapitu w bieżącej pozycji.

InsertTextInRun(String)

Wstawia określony tekst do tekstu Run w bieżącej pozycji.

IsInSameDocument(TextPointer)

Wskazuje, czy określona pozycja znajduje się w tym samym kontenerze tekstowym co bieżące położenie.

MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ToString()

Ten typ lub element członkowski obsługuje infrastrukturę Windows Presentation Foundation (WPF) i nie jest przeznaczony do użycia bezpośrednio z kodu.

Dotyczy

Zobacz też