Aracılığıyla paylaş


TextPointer Sınıf

Tanım

FlowDocument veya TextBlockiçindeki bir konumu temsil eder.

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
Devralma
TextPointer

Örnekler

Aşağıdaki örnekte, belirtilen metin kapsayıcısında ilk Run öğesinin hemen içinde bir konum bulmak için TextPointer nasıl kullanılacağı gösterilmektedir.

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

Aşağıdaki örnek, TextPointer olanaklarını kullanarak basit bir bulma algoritması uygular.

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

Açıklamalar

TextPointer sınıfı aşağıdaki terminolojiyi tanıtır:

  • Konum - Doğal olarak, bir her zaman içerikte konumu gösterir. Bu tür konumlar içerikteki karakterler arasında veya içeriğin yapısını tanımlayan akış içerik öğesi etiketleri arasında yer alır.

  • Geçerli Konum - her zaman bir konumu gösterdiğinden ve bir aracılığıyla gerçekleştirilebilecek işlemlerin çoğu şu anda tarafından işaret edilen konuma göre olduğundan, tarafından gösterilen konumageçerli konumu olarak başvurmak mantıklıdır.

  • Ekleme Konumu - ekleme konumu, ilişkili içerik için herhangi bir semantik kuralı bozmadan yeni içeriğin eklenebileceği bir konumdur. Uygulamada ekleme konumu, içerikte bir şapka işaretinin konumlandırılabileceği herhangi bir yerdir. Ekleme konumu olmayan geçerli bir TextPointer konumuna örnek olarak, iki bitişik Paragraph etiketi (önceki paragrafın kapanış etiketi ile sonraki paragrafın açılış etiketi arasındaki) arasındaki konum verilebilir.

  • Sembol - Sembol içeren işlemleri için, aşağıdakilerden herhangi birisembolü olarak kabul edilir:

  • Metin Kapsayıcısı - metin kapsayıcısı, eldeki akış içeriği için en üst sınırı oluşturan öğedir; bir tarafından gösterilen konum her zaman bir metin kapsayıcısının içinde yer alır. Şu anda metin kapsayıcısı bir FlowDocument veya TextBlockolmalıdır. Genel olarak bakıldığında, farklı metin kapsayıcılarındaki TextPointer örnekleri arasındaki işlemler desteklenmez.

  • Belge - Metin kapsayıcılarındaki içerik, yönteminde ve ve özelliklerinde olduğu gibibelgesi olarak adlandırılır.

TextPointer sınıfı, Windows Presentation Foundation (WPF) akış içeriği öğeleri tarafından temsil edilen içeriğin çapraz geçişini ve işlemesini kolaylaştırmaya yöneliktir; genel olarak, bu tür öğeler TextElementtüretilir. TextPointer kolaylaştırıcı işlemlerden bazıları şunlardır:

bir TextPointer nesnesi tarafından gösterilen konum ve LogicalDirection sabittir. İçerik düzenlendiğinde veya değiştirildiğinde, bir TextPointer tarafından gösterilen konum çevresindeki metne göre değişmez; bunun yerine bu konumun içeriğin başından uzaklığı, içerikteki yeni göreli konumu yansıtacak şekilde karşılık gelen şekilde ayarlanır. Örneğin, belirli bir paragrafın başındaki konumu gösteren bir TextPointer, içerik paragrafın önüne veya arkasına eklendiğinde veya silindiğinde bile bu paragrafın başına işaret etmeye devam eder.

TextPointer sınıfı herhangi bir genel oluşturucu sağlamaz. TextPointer örneği, diğer nesnelerin (diğer TextPointer nesneleri dahil) özellikleri veya yöntemleri kullanılarak oluşturulur. Aşağıdaki listede, TextPointeroluşturan ve döndüren yöntemlere ve özelliklere birkaç örnek verilmiştir. Bu liste kapsamlı değildir:

Özellikler

DocumentEnd

Geçerli konumla ilişkilendirilmiş metin kapsayıcısında içeriğin sonunda bir TextPointer alır.

DocumentStart

Geçerli konumla ilişkili metin kapsayıcısında içeriğin başında bir TextPointer alır.

HasValidLayout

Geçerli konumla ilişkilendirilmiş metin kapsayıcısının geçerli (up-to-date) düzenine sahip olup olmadığını gösteren bir değer alır.

IsAtInsertionPosition

Geçerli konumun ekleme konumu olup olmadığını gösteren bir değer alır.

IsAtLineStartPosition

Geçerli konumun bir satırın başında olup olmadığını gösteren bir değer alır.

LogicalDirection

Geçerli konumla ilişkili içeriği belirsiz hale getirmek için kullanılan geçerli konumla ilişkili mantıksal yönü alır.

Paragraph

Varsa geçerli konumun kapsamını oluşturan paragrafı alır.

Parent

Geçerli konumun kapsamını oluşturan mantıksal üst öğeyi alır.

Yöntemler

CompareTo(TextPointer)

Geçerli TextPointer tarafından belirtilen konumlar ile belirtilen ikinci bir TextPointerarasında sıralı bir karşılaştırma gerçekleştirir.

DeleteTextInRun(Int32)

Belirtilen karakter sayısını geçerli TextPointertarafından belirtilen konumdan siler.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetAdjacentElement(LogicalDirection)

Varsa, geçerli TextPointer belirtilen mantıksal yönde sınırlayan öğesini döndürür.

GetCharacterRect(LogicalDirection)

Geçerli TextPointer belirtilen mantıksal yönde sınırlayan içerik için bir sınırlayıcı kutu (Rect) döndürür.

GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetInsertionPosition(LogicalDirection)

Belirtilen mantıksal yöndeki en yakın ekleme konumuna bir TextPointer döndürür.

GetLineStartPosition(Int32, Int32)

Geçerli TextPointergöre belirtilen satırın başına bir TextPointer döndürür ve kaç satırın atlandığını bildirir.

GetLineStartPosition(Int32)

Geçerli TextPointergöre belirtilen satırın başına bir TextPointer döndürür.

GetNextContextPosition(LogicalDirection)

Belirtilen mantıksal yönde sonraki simgeye bir işaretçi döndürür.

GetNextInsertionPosition(LogicalDirection)

Belirtilen mantıksal yönde sonraki ekleme konumuna bir TextPointer döndürür.

GetOffsetToPosition(TextPointer)

Geçerli TextPointer ile belirtilen ikinci bir TextPointerarasındaki simgelerin sayısını döndürür.

GetPointerContext(LogicalDirection)

Belirtilen mantıksal yönde geçerli TextPointer bitişik içerik için bir kategori göstergesi döndürür.

GetPositionAtOffset(Int32, LogicalDirection)

Belirtilen uzaklık tarafından belirtilen konuma, geçerli TextPointer başından ve belirtilen yönde semboller halinde bir TextPointer döndürür.

GetPositionAtOffset(Int32)

Geçerli TextPointerbaşından itibaren belirtilen uzaklık tarafından belirtilen konuma, sembollerde bir TextPointer döndürür.

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

Belirtilen yöndeki herhangi bir bitişik metinden belirtilen en fazla karakter sayısını çağıran tarafından sağlanan karakter dizisine kopyalar.

GetTextInRun(LogicalDirection)

Belirtilen mantıksal yönde geçerli TextPointer bitişik metin içeren bir dize döndürür.

GetTextRunLength(LogicalDirection)

Geçerli TextPointer ile bir sonraki metin olmayan simge arasındaki Unicode karakter sayısını belirtilen mantıksal yönde döndürür.

GetType()

Geçerli örneğin Type alır.

(Devralındığı yer: Object)
InsertLineBreak()

Geçerli konuma satır sonu ekler.

InsertParagraphBreak()

Geçerli konuma paragraf sonu ekler.

InsertTextInRun(String)

Belirtilen metni geçerli konumdaki metin Run ekler.

IsInSameDocument(TextPointer)

Belirtilen konumun geçerli konumla aynı metin kapsayıcısında olup olmadığını gösterir.

MemberwiseClone()

Geçerli Objectbasit bir kopyasını oluşturur.

(Devralındığı yer: Object)
ToString()

Bu tür veya üye Windows Presentation Foundation (WPF) altyapısını destekler ve doğrudan kodunuzdan kullanılması amaçlanmamıştır.

Şunlara uygulanır

Ayrıca bkz.