TextPointer Класс

Определение

Представляет положение в FlowDocument или TextBlock.Represents a position within a FlowDocument or 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 элемента в указанном текстовом контейнере.The following example demonstrates how to use a TextPointer to find a position just inside of the first Run element in a specified text container.

// 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 с помощью средств.The following example implements a simplistic find algorithm using TextPointer facilities.

// 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 Класс вводит следующую терминологию:The TextPointer class introduces the following terminology:

  • По сути, элемент TextPointer всегда указывает на Расположение в содержимом.Position - Inherently, a TextPointer always points to a position in content. Такие позиции либо находятся между символами в содержимом, либо между тегами элементов содержимого нефиксированного формата, определяющими структуру содержимого.Such positions either fall between characters in the content, or between flow content element tags that define structure for the content.

  • Current, так как TextPointer всегда указывает на расположение, и так как многие операции, которые могут быть выполнены TextPointer через, относятся к положению, на которое в настоящий момент указывает TextPointerобъект, имеет смысл просто ссылаться на расположение, указанное в TextPointer качестве текущей должности.Current Position - Because a TextPointer always indicates a position, and because many of the operations that can be performed through a TextPointer are relative to the position currently pointed to by the TextPointer, it makes sense to simply refer to the position indicated by a TextPointer as the current position.

  • Позиция вставки — позиция вставки — это позиция, в которую можно добавить новое содержимое без нарушения семантических правил для связанного содержимого.Insertion Position - An insertion position is a position where new content may be added without breaking any semantic rules for the associated content. На практике позиция вставки находится в любом месте содержимого, где может быть размещен курсор.In practice, an insertion position is anywhere in content where a caret may be positioned. Примером допустимой TextPointer позиции, которая не является позицией вставки, является положение между двумя соседними Paragraph тегами (то есть между закрывающим тегом предыдущего абзаца и открывающим тегом следующего абзаца).An example of a valid TextPointer position that is not an insertion position is the position between two adjacent Paragraph tags (that is, between the closing tag of the preceding paragraph and the opening tag of the next paragraph).

  • Символ. в целях TextPointer операций, в которых используются символы, любой из следующих элементов считается символом:Symbol - For the purposes of TextPointer operations that involve symbols, any of the following is considered to be a symbol:

    • Открывающий или закрывающий тег для TextElement элемента.An opening or closing tag for a TextElement element.

    • Элемент, содержащийся InlineUIContainer в или BlockUIContainer. UIElementA UIElement element contained within an InlineUIContainer or BlockUIContainer. Обратите внимание, UIElement что такое значение всегда учитывается как один символ; любое дополнительное содержимое или элементы, UIElement содержащиеся в, не учитываются как символы.Note that such a UIElement is always counted as exactly one symbol; any additional content or elements contained by the UIElement are not counted as symbols.

    • Каждый 16-разрядный ЮникодUnicode символ внутри текстового Run элемента.Each 16-bit ЮникодUnicode character inside of a text Run element.

  • Контейнер текста — текстовый контейнер — это элемент, который формирует конечную границу для содержимого нефиксированного формата. расположение, указанное, TextPointer всегда попадает в текстовый контейнер.Text Container - A text container is the element that forms the ultimate border for the flow content at hand; the position indicated by a TextPointer always falls within a text container. В настоящее время контейнер текста должен быть FlowDocument либо TextBlockили.Currently, a text container must be either a FlowDocument or a TextBlock. В общем случае операции между TextPointer экземплярами в разных текстовых контейнерах не поддерживаются.Generally speaking, operations between TextPointer instances in different text containers are not supported.

  • Документ — содержимое в текстовом контейнере называется документом, как в IsInSameDocument методе, а также DocumentStart в свойствах и DocumentEnd .Document - The content in a text container is referred to as a document, as in the IsInSameDocument method and the DocumentStart and DocumentEnd properties.

Класс предназначен для упрощения обхода и обработки содержимого, Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) представленного элементами содержимого нефиксированного формата. в общем случае такие элементы являются производными от TextElement. TextPointerThe TextPointer class is intended to facilitate traversal and manipulation of content that is represented by Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) flow content elements; in general, such elements derive from TextElement. Ниже перечислены некоторые операции, TextPointer которые упрощают выполнение следующих операций.Some of the operations that TextPointer facilitates include the following:

  • Выполнить порядковое сравнение текущей позицией со второй заданной позицией.Perform an ordinal comparison of the current position with a second specified position. См. CompareTo метод.See the CompareTo method.

  • Определение типа содержимого, примыкающего к текущему положению в указанном направлении.Determine the type of content adjacent to the current position in a specified direction. См. TextPointerContext метод и перечисление. GetPointerContextSee the GetPointerContext method and TextPointerContext enumeration.

  • Возвращает область TextElement , которая находится рядом с текущей позицией.Get the TextElement that scopes or is adjacent to the current position. См Paragraph . раздел GetAdjacentElement и метод.See Paragraph and the GetAdjacentElement method.

  • Возвращает текстовый контейнер, который ограничивает область текущего документа.Get the text container that scopes the current document. См. свойство Parent.See the Parent property.

  • Получение указанного числа символов перед текущей позицией или после нее.Get a specified number of characters preceding or following the current position. См. GetTextInRun метод.See the GetTextInRun method.

  • Вставка строки символов в текущей позиции.Insert a string of characters at the current position. См. InsertTextInRun метод.See the InsertTextInRun method.

  • Поиск границ строк в содержимом.Find line boundaries in content. См. IsAtLineStartPosition метод и свойство. GetLineStartPositionSee the GetLineStartPosition method and IsAtLineStartPosition property.

  • Преобразование между TextPointer позициями и смещениями символов в содержимое.Translate between TextPointer positions and symbol offsets into content. См. методы GetPositionAtOffsetи. GetOffsetToPositionSee the GetOffsetToPosition and GetPositionAtOffset methods.

  • Выполнение визуального тестирования нажатия путем перевода между TextPointer позицией Point и представлением относительных координат.Perform visual hit testing by translating between a TextPointer position and a Point representing relative coordinates.

  • Найдите расположенную рядом позицию вставки или проверьте, является ли текущая позиция позицией вставки.Find a nearby insertion position, or check whether the current position is an insertion position. См. методы GetNextInsertionPosition GetInsertionPosition и Свойства.IsAtInsertionPositionSee the GetInsertionPosition and GetNextInsertionPosition methods and the IsAtInsertionPosition property.

Расположение и LogicalDirection обозначено объектом как TextPointer неизменяемые.The position and LogicalDirection indicated by a TextPointer object are immutable. Когда содержимое редактируется или изменяется, позиция, обозначенная объектом TextPointer , не изменяется относительно окружающего текста; вместо этого смещение позиции от начала содержимого корректируется соответствующим образом для отражения новой относительной позиции в содержани.When content is edited or modified, the position indicated by a TextPointer does not change relative to the surrounding text; rather the offset of that position from the beginning of content is adjusted correspondingly to reflect the new relative position in content. Например, объект TextPointer , указывающий позицию в начале данного абзаца, будет указывать на начало этого абзаца, даже когда содержимое вставляется или удаляется до или после абзаца.For example, a TextPointer that indicates a position at the beginning of a given paragraph continues to point to the beginning of that paragraph even when content is inserted or deleted before or after the paragraph.

TextPointer Класс не предоставляет открытые конструкторы.The TextPointer class does not provide any public constructors. Экземпляр TextPointer создается с помощью свойств или методов других объектов (включая другие TextPointer объекты).An instance of TextPointer is created by using properties or methods of other objects (including other TextPointer objects). В следующем списке приведено несколько примеров методов и свойств, которые создают и возвращают TextPointer.The following list provides a few examples of methods and properties that create and return a TextPointer. Этот список не является исчерпывающим:This list is not exhaustive:

Свойства

DocumentEnd

Получение TextPointer в конце содержимого в текстовом контейнере, связанном с текущим положением.Gets a TextPointer at the end of content in the text container associated with the current position.

DocumentStart

Получение TextPointer в начале содержимого в текстовом контейнере, связанном с текущим положением.Gets a TextPointer at the beginning of content in the text container associated with the current position.

HasValidLayout

Получение значения, указывающего, имеется ли для текстового контейнера, связанного с текущим положением, допустимый (современным) макет.Gets a value that indicates whether the text container associated with the current position has a valid (up-to-date) layout.

IsAtInsertionPosition

Получение значения, указывающего, является ли положение вставки текущим положением.Gets a value that indicates whether the current position is an insertion position.

IsAtLineStartPosition

Получение значения, указывающего, находится ли текущее положение в начале строки.Gets a value that indicates whether the current position is at the beginning of a line.

LogicalDirection

Получение логического направления, связанного с текущим положением, которое используется для снятия неоднозначности в отношении содержимого, связанного с текущим положением.Gets the logical direction associated with the current position which is used to disambiguate content associated with the current position.

Paragraph

Получение абзаца, в области которого находится текущее положение, если таковой имеется.Gets the paragraph that scopes the current position, if any.

Parent

Получение логического родительского элемента, задающего область для текущего положения.Gets the logical parent that scopes the current position.

Методы

CompareTo(TextPointer)

Выполнение порядкового сравнения между положениями, указанными текущим TextPointer и вторым указанным TextPointer.Performs an ordinal comparison between the positions specified by the current TextPointer and a second specified TextPointer.

DeleteTextInRun(Int32)

Удаление указанного числа символов, начиная с положения, указанного текущим TextPointer.Deletes the specified number of characters from the position indicated by the current TextPointer.

Equals(Object)

Определяет, равен ли заданный объект текущему объекту.Determines whether the specified object is equal to the current object.

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

Возвращение элемента, если таковой имеется, который граничит с текущим TextPointer в указанном логическом направлении.Returns the element, if any, that borders the current TextPointer in the specified logical direction.

GetCharacterRect(LogicalDirection)

Возвращение ограничивающего прямоугольника (Rect) для содержимого, которое граничит с текущим TextPointer в указанном логическом направлении.Returns a bounding box (Rect) for content that borders the current TextPointer in the specified logical direction.

GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

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

Возвращение TextPointer к ближайшему положению вставки в заданном логическом направлении.Returns a TextPointer to the closest insertion position in the specified logical direction.

GetLineStartPosition(Int32)

Возвращение TextPointer в начало строки, задаваемое относительно текущего TextPointer.Returns a TextPointer to the beginning of a line that is specified relative to the current TextPointer.

GetLineStartPosition(Int32, Int32)

Возвращение TextPointer в начало строки, задаваемое относительно текущего TextPointer, и создание отчета о числе пропущенных строк.Returns a TextPointer to the beginning of a line that is specified relative to the current TextPointer, and reports how many lines were skipped.

GetNextContextPosition(LogicalDirection)

Возвращение указателя к следующему символу в указанном логическом направлении.Returns a pointer to the next symbol in the specified logical direction.

GetNextInsertionPosition(LogicalDirection)

Возвращение TextPointer к следующему положению вставки в указанном логическом направлении.Returns a TextPointer to the next insertion position in the specified logical direction.

GetOffsetToPosition(TextPointer)

Возвращение числа символов между текущим TextPointer и вторым указанным TextPointer.Returns the count of symbols between the current TextPointer and a second specified TextPointer.

GetPointerContext(LogicalDirection)

Возвращение индикатора категории для содержимого, примыкающего к текущему TextPointer в указанном логическом направлении.Returns a category indicator for the content adjacent to the current TextPointer in the specified logical direction.

GetPositionAtOffset(Int32)

Возвращение TextPointer в положение, указанное заданным смещением в символах от начала текущего TextPointer.Returns a TextPointer to the position indicated by the specified offset, in symbols, from the beginning of the current TextPointer.

GetPositionAtOffset(Int32, LogicalDirection)

Возвращение TextPointer в положение, указанное заданным смещением в символах от начала текущего TextPointer, а также в указанном направлении.Returns a TextPointer to the position indicated by the specified offset, in symbols, from the beginning of the current TextPointer and in the specified direction.

GetTextInRun(LogicalDirection)

Возвращение строки, содержащей любой текст, примыкающий к текущему TextPointer в указанном логическом направлении.Returns a string containing any text adjacent to the current TextPointer in the specified logical direction.

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

Копирование в указанном направлении заданного максимального числа символов из примыкающего текста в массив символов, предоставленный вызывающим.Copies the specified maximum number of characters from any adjacent text in the specified direction into a caller-supplied character array.

GetTextRunLength(LogicalDirection)

Возвращение числа знаков Юникода между текущим TextPointer и следующим нетекстовым символом в указанном логическом направлении.Returns the number of Unicode characters between the current TextPointer and the next non-text symbol, in the specified logical direction.

GetType()

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

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

Вставка разрыва строки в текущем положении.Inserts a line break at the current position.

InsertParagraphBreak()

Вставка разрыва абзаца в текущем положении.Inserts a paragraph break at the current position.

InsertTextInRun(String)

Вставка указанного текста в текст Run в текущее положение.Inserts the specified text into the text Run at the current position.

IsInSameDocument(TextPointer)

Определение, находится ли указанное положение в том же текстовом контейнере, что и текущее положение.Indicates whether the specified position is in the same text container as the current position.

MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

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

Данный тип или член поддерживает инфраструктуру Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) и не предназначен для непосредственного использования из кода.This type or member supports the Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) infrastructure and is not intended to be used directly from your code.

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

Дополнительно