TextPointer Osztály

Definíció

Egy vagy FlowDocumenttöbb pozíciót TextBlock jelöl.

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
Öröklődés
TextPointer

Példák

Az alábbi példa bemutatja, TextPointer hogyan kereshet pozíciót egy adott szövegtároló első Run elemében.

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

Az alábbi példa egy egyszerű keresési algoritmust implementál a létesítmények használatával TextPointer .

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

Megjegyzések

Az TextPointer osztály a következő terminológiát mutatja be:

  • Pozíció – Eredendően a TextPointer tartalom egy pozíciójára mutat. Az ilyen pozíciók vagy a tartalom karakterei, vagy a tartalom struktúráját meghatározó folyamattartalom-elemek címkéi közé esnek.

  • Aktuális pozíció – Mivel a TextPointer pozíció mindig egy pozíciót jelöl, és mivel az a-on TextPointer keresztül végrehajtható műveletek nagy része a jelenlegi TextPointerpozícióhoz képest van, érdemes egyszerűen az aktuális TextPointerpozícióként megjelölt pozícióra hivatkozni.

  • Beszúrási pozíció – A beszúrási pozíció olyan pozíció, ahol a társított tartalom szemantikai szabályainak megszegése nélkül új tartalom adható hozzá. A gyakorlatban a beszúrási pozíció bárhol megtalálható a tartalomban, ahol egy ápoló elhelyezhető. Egy olyan érvényes TextPointer pozícióra példa, amely nem beszúrási pozíció, a két szomszédos Paragraph címke (azaz az előző bekezdés záró címkéje és a következő bekezdés nyitó címkéje) közötti pozíció.

  • Szimbólum – Szimbólumokat tartalmazó műveletek esetén TextPointer az alábbiak bármelyike szimbólumnak minősül:

    • Elem nyitó vagy záró címkéje TextElement .

    • Egy UIElement vagy InlineUIContainertöbb elemet tartalmazó BlockUIContainer elem. Vegye figyelembe, hogy az UIElement ilyen elemeket mindig pontosan egy szimbólumnak számítják; a UIElement bennük található további tartalmak vagy elemek nem számítanak szimbólumnak.

    • Minden 16 bites Unicode-karakter egy szövegelemen Run belül.

  • Szövegtároló – A szövegtároló az az elem, amely a folyamatban lévő folyamattartalom végső szegélyét képezi; a mindig egy szövegtárolóban megadott TextPointer pozíció. A szövegtárolóknak jelenleg egy FlowDocument vagy egynek kell lenniük TextBlock. Általánosságban elmondható, hogy a különböző szövegtárolók példányai közötti TextPointer műveletek nem támogatottak.

  • Dokumentum – A szövegtároló tartalmát dokumentumnak nevezzük, ahogyan a metódusban és a IsInSameDocumentDocumentStartDocumentEnd tulajdonságokban is.

A TextPointer osztály célja, hogy megkönnyítse a Windows megjelenítési alaprendszer (WPF) adatfolyam-tartalomelemek által képviselt tartalom bejárását és kezelését; általában ezek az elemek TextElement származnak. Néhány olyan művelet, amely TextPointer megkönnyíti a következőket:

  • Végezze el az aktuális pozíció és egy második megadott pozíció sorrendi összehasonlítását. Tekintse meg a metódust CompareTo .

  • Határozza meg az aktuális pozícióval szomszédos tartalom típusát egy adott irányban. Tekintse meg a metódust és GetPointerContext az TextPointerContext enumerálást.

  • Kérje le a TextElement hatóköröket, vagy az aktuális pozícióval szomszédos. Lásd Paragraph és a GetAdjacentElement metódus.

  • Szerezze be az aktuális dokumentum hatókörébe tartozó szövegtárolót. Tekintse meg a tulajdonságot Parent .

  • Az aktuális pozíció előtt vagy után megadott számú karakter lekérése. Tekintse meg a metódust GetTextInRun .

  • Szúrjon be egy karaktersorozatot az aktuális pozícióba. Tekintse meg a metódust InsertTextInRun .

  • Vonalhatárok keresése a tartalomban. Tekintse meg a metódust és GetLineStartPosition a IsAtLineStartPosition tulajdonságot.

  • A pozíciók és szimbólumok közötti TextPointer eltolódások lefordítása tartalommá. Tekintse meg a módszereket és GetOffsetToPosition a GetPositionAtOffset módszereket.

  • Vizualizációs találatok tesztelése egy pozíció és egy TextPointerPoint relatív koordináták közötti fordítással.

  • Keresse meg a közeli beszúrási pozíciót, vagy ellenőrizze, hogy az aktuális pozíció beszúrási pozíció-e. Tekintse meg a GetInsertionPosition metódusokat és GetNextInsertionPosition a tulajdonságot IsAtInsertionPosition .

Az objektum pozíciója LogicalDirection és TextPointer jelzése nem módosítható. A tartalom szerkesztésekor vagy módosításakor a tartalom által TextPointer jelzett pozíció nem változik a környező szöveghez képest, hanem a tartalom elejéről származó pozíció eltolása a tartalom új relatív pozíciójának megfelelően van igazítva. Például az TextPointer adott bekezdés elején lévő pozíció továbbra is a bekezdés elejére mutat, még akkor is, ha a tartalmat beszúrják vagy törlik a bekezdés előtt vagy után.

Az TextPointer osztály nem biztosít nyilvános konstruktorokat. A példányok TextPointer létrehozása más objektumok (beleértve a többi TextPointer objektumot is) tulajdonságaival vagy metódusával történik. Az alábbi lista néhány példát mutat be azokra a metódusokra és tulajdonságokra, amelyek létrehoznak és visszaadnak egy TextPointer. Ez a lista nem teljes:

Tulajdonságok

Name Description
DocumentEnd

TextPointer Lekéri az aktuális pozícióhoz társított szövegtároló tartalmát a tartalom végén.

DocumentStart

TextPointer Lekéri a tartalom elejét az aktuális pozícióhoz társított szövegtárolóban.

HasValidLayout

Olyan értéket kap, amely jelzi, hogy az aktuális pozícióhoz társított szövegtároló érvényes (up-to-date) elrendezéssel rendelkezik-e.

IsAtInsertionPosition

Olyan értéket kap, amely jelzi, hogy az aktuális pozíció beszúrási pozíció-e.

IsAtLineStartPosition

Olyan értéket kap, amely jelzi, hogy az aktuális pozíció egy sor elején van-e.

LogicalDirection

Lekéri az aktuális pozícióhoz társított logikai irányt, amely az aktuális pozícióhoz társított tartalom egyértelműsítésére szolgál.

Paragraph

Lekéri az aktuális pozícióra vonatkozó bekezdést, ha van ilyen.

Parent

Lekéri az aktuális pozíciót hatókörbe helyező logikai szülőt.

Metódusok

Name Description
CompareTo(TextPointer)

Az aktuális TextPointer és a megadott másodperc által megadott pozíciók közötti sorszám-összehasonlítást hajtja végre TextPointer.

DeleteTextInRun(Int32)

Törli a megadott számú karaktert az aktuális TextPointerpozícióból.

Equals(Object)

Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal.

(Öröklődés forrása Object)
GetAdjacentElement(LogicalDirection)

A megadott logikai irányban határos TextPointer elemet adja vissza, ha van ilyen.

GetCharacterRect(LogicalDirection)

Határolókeretet (Rect) ad vissza az aktuálisat TextPointer a megadott logikai irányban határoló tartalomhoz.

GetHashCode()

Ez az alapértelmezett kivonatoló függvény.

(Öröklődés forrása Object)
GetInsertionPosition(LogicalDirection)

TextPointer A legközelebbi beszúrási pozíciót adja vissza a megadott logikai irányban.

GetLineStartPosition(Int32, Int32)

Az aktuálishoz TextPointerképest megadott sor elejére ad vissza egy TextPointer értéket, és azt jelzi, hogy hány sort hagyott ki a program.

GetLineStartPosition(Int32)

TextPointer Az aktuálishoz TextPointerviszonyítva megadott sor elejére ad vissza egy értéket.

GetNextContextPosition(LogicalDirection)

A megadott logikai irányban a következő szimbólumra mutató mutatót ad vissza.

GetNextInsertionPosition(LogicalDirection)

Visszaadja TextPointer a következő beszúrási pozíciót a megadott logikai irányban.

GetOffsetToPosition(TextPointer)

Az aktuális TextPointer és a megadott TextPointermásodperc közötti szimbólumok számát adja vissza.

GetPointerContext(LogicalDirection)

Egy kategóriajelzőt ad vissza az aktuális TextPointer mellett lévő tartalomhoz a megadott logikai irányban.

GetPositionAtOffset(Int32, LogicalDirection)

TextPointer A megadott eltolás által jelzett pozícióra ad vissza egy értéket szimbólumokban, az áram TextPointer kezdetétől a megadott irányban.

GetPositionAtOffset(Int32)

A megadott eltolás által jelzett pozícióra ad vissza egy TextPointer értéket szimbólumokban, az aktuális TextPointerkezdettől kezdve.

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

A megadott számú karaktert a megadott irányban lévő szomszédos szövegből másolja át egy hívó által megadott karaktertömbbe.

GetTextInRun(LogicalDirection)

Visszaad egy sztringet, amely az aktuális TextPointer szöveggel szomszédos szöveget a megadott logikai irányban tartalmazza.

GetTextRunLength(LogicalDirection)

Az aktuális TextPointer és a következő nem szöveges szimbólum közötti Unicode-karakterek számát adja vissza a megadott logikai irányban.

GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
InsertLineBreak()

Beszúr egy sortörést az aktuális pozícióba.

InsertParagraphBreak()

Bekezdéstörés beszúrása az aktuális pozícióba.

InsertTextInRun(String)

Beszúrja a megadott szöveget az aktuális pozícióban lévő szövegbe Run .

IsInSameDocument(TextPointer)

Azt jelzi, hogy a megadott pozíció ugyanabban a szövegtárolóban van-e, mint az aktuális pozíció.

MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
ToString()

Ez a típus vagy tag támogatja a Windows megjelenítési alaprendszer (WPF) infrastruktúrát, és nem közvetlenül a kódból való használatra szolgál.

A következőre érvényes:

Lásd még