Sdílet prostřednictvím


TextPointer Třída

Definice

Představuje pozici v rámci FlowDocument nebo 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
Dědičnost
TextPointer

Příklady

Následující příklad ukazuje, jak pomocí TextPointer najít pozici přímo uvnitř prvního Run elementu v zadaném textovém kontejneru.

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

Následující příklad implementuje zjednodušený algoritmus hledání pomocí TextPointer zařízení.

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

Poznámky

Třída TextPointer zavádí následující terminologii:

  • Pozice – ze své podstaty TextPointer vždy odkazuje na pozici obsahu. Tyto pozice buď spadají mezi znaky v obsahu, nebo mezi značkami prvku obsahu toku, které definují strukturu obsahu.

  • Aktuální pozice – protože TextPointer vždy označuje pozici, a protože mnoho operací, které lze provést prostřednictvím TextPointer, jsou relativní vzhledem k pozici, na kterou aktuálně odkazuje TextPointer, dává smysl jednoduše odkazovat na pozici označenou TextPointer jako aktuální pozici.

  • Pozice vložení – pozice vložení je pozice, ve které může být přidán nový obsah, aniž by došlo k porušení sémantických pravidel přidruženého obsahu. V praxi je pozice vložení kdekoli v obsahu, kde je možné umístit kurzor. Příkladem platné pozice TextPointer, která není pozice vložení, je pozice mezi dvěma sousedními značkami Paragraph (to znamená mezi pravou značkou předchozího odstavce a levou značkou dalšího odstavce).

  • Symbol – pro účely TextPointer operací, které zahrnují symboly, se považuje za symbol :

  • Kontejner textu – kontejner textu je prvek, který tvoří konečný okraj obsahu toku. pozice označená TextPointer vždy spadá do textového kontejneru. V současné době musí být textový kontejner buď FlowDocument, nebo TextBlock. Obecně řečeno, operace mezi TextPointer instancemi v různých textových kontejnerech se nepodporují.

  • Document – Obsah v textovém kontejneru se označuje jako dokument, stejně jako v IsInSameDocument metoda a DocumentStart a DocumentEnd vlastnosti.

Třída TextPointer je určena k usnadnění procházení a manipulace s obsahem, který je reprezentován prvky obsahu toku Windows Presentation Foundation (WPF). tyto prvky jsou obecně odvozeny z TextElement. Mezi operace, které TextPointer usnadňují, patří:

Pozice a LogicalDirection označené objektem TextPointer jsou neměnné. Při úpravě nebo úpravě obsahu se pozice označená TextPointer nezmění vzhledem k okolnímu textu; místo toho se posun této pozice od začátku obsahu upraví odpovídajícím způsobem tak, aby odrážela novou relativní pozici v obsahu. Například TextPointer, která označuje pozici na začátku daného odstavce, pokračuje odkazem na začátek odstavce, i když je obsah vložen nebo odstraněn před odstavcem nebo za odstavcem.

Třída TextPointer neposkytuje žádné veřejné konstruktory. Instance TextPointer je vytvořena pomocí vlastností nebo metod jiných objektů (včetně jiných TextPointer objektů). Následující seznam obsahuje několik příkladů metod a vlastností, které vytvářejí a vracejí TextPointer. Tento seznam není vyčerpávající:

Vlastnosti

DocumentEnd

Získá TextPointer na konci obsahu v textovém kontejneru přidruženém k aktuální pozici.

DocumentStart

Získá TextPointer na začátku obsahu v textovém kontejneru přidruženém k aktuální pozici.

HasValidLayout

Získá hodnotu, která určuje, zda textový kontejner přidružený k aktuální pozici má platné (up-to-date) rozložení.

IsAtInsertionPosition

Získá hodnotu, která určuje, zda je aktuální pozice pozice vložení.

IsAtLineStartPosition

Získá hodnotu, která určuje, zda je aktuální pozice na začátku řádku.

LogicalDirection

Získá logický směr přidružený k aktuální pozici, která slouží k nejednoznačnosti obsahu přidruženého k aktuální pozici.

Paragraph

Získá odstavec, který určuje aktuální pozici, pokud existuje.

Parent

Získá logický nadřazený objekt, který definuje aktuální pozici.

Metody

CompareTo(TextPointer)

Provede řadové porovnání mezi pozicemi určenými aktuálním TextPointer a druhým zadaným TextPointer.

DeleteTextInRun(Int32)

Odstraní zadaný počet znaků z pozice určené aktuálním TextPointer.

Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

(Zděděno od Object)
GetAdjacentElement(LogicalDirection)

Vrátí prvek, pokud existuje, že ohraničení aktuální TextPointer v zadaném logickém směru.

GetCharacterRect(LogicalDirection)

Vrátí ohraničující rámeček (Rect) pro obsah, který ohraničení aktuální TextPointer v zadaném logickém směru.

GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetInsertionPosition(LogicalDirection)

Vrátí TextPointer na nejbližší pozici vložení v zadaném logickém směru.

GetLineStartPosition(Int32, Int32)

Vrátí TextPointer na začátek řádku zadaného vzhledem k aktuálnímu TextPointera hlásí, kolik řádků bylo vynecháno.

GetLineStartPosition(Int32)

Vrátí TextPointer na začátek řádku zadaného vzhledem k aktuálnímu TextPointer.

GetNextContextPosition(LogicalDirection)

Vrátí ukazatel na další symbol v zadaném logickém směru.

GetNextInsertionPosition(LogicalDirection)

Vrátí TextPointer na další pozici vložení v zadaném logickém směru.

GetOffsetToPosition(TextPointer)

Vrátí počet symbolů mezi aktuálním TextPointer a druhým zadaným TextPointer.

GetPointerContext(LogicalDirection)

Vrátí indikátor kategorie pro obsah sousedící s aktuálním TextPointer v zadaném logickém směru.

GetPositionAtOffset(Int32, LogicalDirection)

Vrátí TextPointer na pozici označenou zadaným posunem v symbolech od začátku aktuálního TextPointer a v zadaném směru.

GetPositionAtOffset(Int32)

Vrátí TextPointer na pozici označenou zadaným posunem v symbolech od začátku aktuálního TextPointer.

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

Zkopíruje zadaný maximální počet znaků z libovolného sousedního textu v zadaném směru do pole znaků zadaných volajícím.

GetTextInRun(LogicalDirection)

Vrátí řetězec obsahující libovolný text sousedící s aktuálním TextPointer v zadaném logickém směru.

GetTextRunLength(LogicalDirection)

Vrátí počet znaků Unicode mezi aktuálním TextPointer a dalším netextovým symbolem v zadaném logickém směru.

GetType()

Získá Type aktuální instance.

(Zděděno od Object)
InsertLineBreak()

Vloží konec řádku na aktuální pozici.

InsertParagraphBreak()

Vloží konec odstavce na aktuální pozici.

InsertTextInRun(String)

Vloží zadaný text do textového Run na aktuální pozici.

IsInSameDocument(TextPointer)

Určuje, zda je zadaná pozice ve stejném textovém kontejneru jako aktuální pozice.

MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
ToString()

Tento typ nebo člen podporuje infrastrukturu Windows Presentation Foundation (WPF) a není určena k použití přímo z vašeho kódu.

Platí pro

Viz také