Sdílet prostřednictvím


TextPointer Třída

Definice

Představuje pozici uvnitř nebo FlowDocument 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 použít TextPointer k vyhledání pozice přímo uvnitř prvního Run prvku 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 v obsahu. Tyto pozice buď spadají mezi znaky v obsahu, nebo mezi značkami prvků obsahu toku, které definují strukturu obsahu.

  • Aktuální pozice – Protože vždy označuje pozici, a protože TextPointer 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 , kde se může přidat 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 může být umístěn kurzor. Příkladem platné TextPointer pozice, která není pozice vložení, je pozice mezi dvěma sousedními Paragraph značkami (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 některý z následujících symbolů považuje za symbol:

    • Levá nebo pravá značka prvku TextElement

    • Prvek UIElement obsažený uvnitř nebo InlineUIContainer BlockUIContainer. Všimněte si, že takový symbol UIElement se vždy počítá jako přesně jeden symbol; jakýkoli další obsah nebo prvky, které obsahuje, UIElement se nezapočítávají jako symboly.

    • Každý 16bitový znak Unicode uvnitř textového Run prvku.

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

  • Dokument – Obsah v textovém kontejneru se označuje jako dokument, jako v IsInSameDocument metodě a vlastnostech DocumentStart DocumentEnd .

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), obecně, tyto prvky jsou odvozeny od TextElement. Mezi operace, které usnadňují práci, TextPointer patří:

Pozice a LogicalDirection označená objektem TextPointer je neměnná. Při úpravách nebo úpravách obsahu se pozice označená okolním textem TextPointer nezmění. Posun této pozice od začátku obsahu se upraví odpovídajícím způsobem tak, aby odrážela novou relativní pozici v obsahu. TextPointer Například označuje pozici na začátku daného odstavce i nadále odkazovat na začátek tohoto 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

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

DocumentStart

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

HasValidLayout

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

IsAtInsertionPosition

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

IsAtLineStartPosition

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

LogicalDirection

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

Paragraph

Získá odstavec, který definuje aktuální pozici, pokud existuje.

Parent

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

Metody

CompareTo(TextPointer)

Provede poř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 označené aktuálním TextPointer.

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

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

Vrátí prvek, pokud existuje, že ohraničení aktuálního proudu 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ího stavu TextPointer v zadaném logickém směru.

GetHashCode()

Slouží jako výchozí funkce hash.

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

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

GetLineStartPosition(Int32)

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

GetLineStartPosition(Int32, Int32)

TextPointer Vrátí na začátek řádku zadaného vzhledem k aktuálnímu TextPointerřádku a hlásí, kolik řádků bylo přeskočeno.

GetNextContextPosition(LogicalDirection)

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

GetNextInsertionPosition(LogicalDirection)

TextPointer Vrátí hodnotu 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 TextPointersymbolem .

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)

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

GetPositionAtOffset(Int32, LogicalDirection)

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

GetTextInRun(LogicalDirection)

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

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ého volajícím.

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()

Type Získá aktuální instanci.

(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 textu 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ří použádnou kopii aktuálního souboru 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é