TextPointer Класс

Определение

Представляет положение в 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
Наследование
TextPointer

Примеры

В следующем примере показано, как использовать объект для TextPointer поиска позиции непосредственно внутри первого Run элемента в указанном текстовом контейнере.

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

В следующем примере реализуется упрощенный алгоритм поиска с помощью 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

Комментарии

Класс TextPointer вводит следующую терминологию:

  • Позиция — по своей сути, TextPointer всегда указывает на позицию в содержимом. Такие позиции либо падают между символами в содержимом, либо между тегами элементов содержимого потока, определяющими структуру содержимого.

  • Текущая позиция — так как TextPointer всегда указывает позицию, и поскольку многие операции, которые могут выполняться через позицию TextPointer , относительно позиции, на которую указывает текущий, TextPointerимеет смысл просто ссылаться на позицию, указанную текущей TextPointer позицией.

  • Позиция вставки — позиция вставки — это позиция, в которой можно добавить новое содержимое без нарушения каких-либо семантических правил для связанного содержимого. На практике позиция вставки находится в любом месте содержимого, где может располагаться курсор. Примером допустимой TextPointer позиции, которая не является позицией вставки, является позиция между двумя смежными Paragraph тегами (т. е. между закрывающим тегом предыдущего абзаца и открывающим тегом следующего абзаца).

  • Symbol — для операций TextPointer , в которых используются символы, любой из следующих символов считается символом:

    • Открывающий или закрывающий тег для TextElement элемента.

    • Элемент UIElement , содержащийся в объекте InlineUIContainer или BlockUIContainer. Обратите внимание, что такое значение UIElement всегда учитывается как один символ; любое дополнительное содержимое или элементы, содержащиеся в UIElement нем, не считаются символами.

    • Каждый 16-разрядный символ Юникода внутри текстового Run элемента.

  • Текстовый контейнер — это элемент, который формирует конечную границу для содержимого потока; позиция, указанная TextPointer всегда попадает в текстовый контейнер. В настоящее время текстовый контейнер должен быть либо aFlowDocument, либо .TextBlock Как правило, операции между TextPointer экземплярами в разных текстовых контейнерах не поддерживаются.

  • Документ — содержимое текстового контейнера называется документом, как в методе IsInSameDocument и свойствах DocumentStart DocumentEnd .

Класс TextPointer предназначен для упрощения обхода и манипуляции с содержимым, представленным элементами содержимого потока Windows Presentation Foundation (WPF), как правило, такие элементы являются производными.TextElement Некоторые операции, которые упрощают, TextPointer включают в себя следующее:

  • Выполните порядковое сравнение текущей позиции со второй указанной позицией. См. CompareTo метод.

  • Определите тип содержимого, соседнего с текущей позицией в указанном направлении. См. GetPointerContext метод и TextPointerContext перечисление.

  • TextElement Получение областей или смежных с текущей позицией. См. Paragraph и GetAdjacentElement метод.

  • Получите текстовый контейнер, который ограничивает текущий документ. См. описание свойства Parent.

  • Получение указанного числа символов, предшествующих или после текущей позиции. См. GetTextInRun метод.

  • Вставьте строку символов в текущую позицию. См. InsertTextInRun метод.

  • Найдите границы строк в содержимом. См. GetLineStartPosition метод и IsAtLineStartPosition свойство.

  • Перевод между TextPointer позициями и смещениями символов в содержимое. GetOffsetToPosition См. раздел и GetPositionAtOffset методы.

  • Выполните визуальное тестирование попадания, преобразовав TextPointer положение и Point представляющее относительные координаты.

  • Найдите близлежащую позицию вставки или проверьте, является ли текущая позиция позицией вставки. Ознакомьтесь с методами GetInsertionPosition и GetNextInsertionPosition свойствами IsAtInsertionPosition .

Положение и LogicalDirection указанное TextPointer объектом являются неизменяемыми. При редактировании или изменении содержимого положение, указанное элементом TextPointer , не меняется относительно окружающего текста. Вместо этого смещение этой позиции от начала содержимого корректируется соответствующим образом, чтобы отразить новую относительную позицию в содержимом. Например, положение TextPointer в начале данного абзаца продолжает указывать на начало этого абзаца, даже если содержимое вставляется или удаляется до или после абзаца.

Класс TextPointer не предоставляет открытых конструкторов. Экземпляр TextPointer создается с помощью свойств или методов других объектов (включая другие TextPointer объекты). В следующем списке приведены несколько примеров методов и свойств, которые создают и возвращают объект TextPointer. Этот список не является исчерпывающим:

Свойства

DocumentEnd

Получение TextPointer в конце содержимого в текстовом контейнере, связанном с текущим положением.

DocumentStart

Получение TextPointer в начале содержимого в текстовом контейнере, связанном с текущим положением.

HasValidLayout

Получение значения, указывающего, имеется ли для текстового контейнера, связанного с текущим положением, допустимый (современным) макет.

IsAtInsertionPosition

Получение значения, указывающего, является ли положение вставки текущим положением.

IsAtLineStartPosition

Получение значения, указывающего, находится ли текущее положение в начале строки.

LogicalDirection

Получение логического направления, связанного с текущим положением, которое используется для снятия неоднозначности в отношении содержимого, связанного с текущим положением.

Paragraph

Получение абзаца, в области которого находится текущее положение, если таковой имеется.

Parent

Получение логического родительского элемента, задающего область для текущего положения.

Методы

CompareTo(TextPointer)

Выполнение порядкового сравнения между положениями, указанными текущим TextPointer и вторым указанным TextPointer.

DeleteTextInRun(Int32)

Удаление указанного числа символов, начиная с положения, указанного текущим TextPointer.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetAdjacentElement(LogicalDirection)

Возвращение элемента, если таковой имеется, который граничит с текущим TextPointer в указанном логическом направлении.

GetCharacterRect(LogicalDirection)

Возвращение ограничивающего прямоугольника (Rect) для содержимого, которое граничит с текущим TextPointer в указанном логическом направлении.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetInsertionPosition(LogicalDirection)

Возвращение TextPointer к ближайшему положению вставки в заданном логическом направлении.

GetLineStartPosition(Int32)

Возвращение TextPointer в начало строки, задаваемое относительно текущего TextPointer.

GetLineStartPosition(Int32, Int32)

Возвращение TextPointer в начало строки, задаваемое относительно текущего TextPointer, и создание отчета о числе пропущенных строк.

GetNextContextPosition(LogicalDirection)

Возвращение указателя к следующему символу в указанном логическом направлении.

GetNextInsertionPosition(LogicalDirection)

Возвращение TextPointer к следующему положению вставки в указанном логическом направлении.

GetOffsetToPosition(TextPointer)

Возвращение числа символов между текущим TextPointer и вторым указанным TextPointer.

GetPointerContext(LogicalDirection)

Возвращение индикатора категории для содержимого, примыкающего к текущему TextPointer в указанном логическом направлении.

GetPositionAtOffset(Int32)

Возвращение TextPointer в положение, указанное заданным смещением в символах от начала текущего TextPointer.

GetPositionAtOffset(Int32, LogicalDirection)

Возвращение TextPointer в положение, указанное заданным смещением в символах от начала текущего TextPointer, а также в указанном направлении.

GetTextInRun(LogicalDirection)

Возвращение строки, содержащей любой текст, примыкающий к текущему TextPointer в указанном логическом направлении.

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

Копирование в указанном направлении заданного максимального числа символов из примыкающего текста в массив символов, предоставленный вызывающим.

GetTextRunLength(LogicalDirection)

Возвращение числа знаков Юникода между текущим TextPointer и следующим нетекстовым символом в указанном логическом направлении.

GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
InsertLineBreak()

Вставка разрыва строки в текущем положении.

InsertParagraphBreak()

Вставка разрыва абзаца в текущем положении.

InsertTextInRun(String)

Вставка указанного текста в текст Run в текущее положение.

IsInSameDocument(TextPointer)

Определение, находится ли указанное положение в том же текстовом контейнере, что и текущее положение.

MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ToString()

Этот тип или член поддерживает инфраструктуру Windows Presentation Foundation (WPF) и не предназначен для непосредственного использования из кода.

Применяется к

См. также раздел