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 позицию внутри первого 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 тегами (то есть между закрывающим тегом предыдущего абзаца и открывающим тегом следующего абзаца).
Символ . В целях операций TextPointer , включающих символы, любой из следующих символов считается символом:
Открывающий или закрывающий тег элемента TextElement .
Элемент UIElement , содержащийся в объекте InlineUIContainer или BlockUIContainer. Обратите внимание, что такое UIElement всегда учитывается как один символ; любое дополнительное содержимое или элементы, содержащиеся в нем UIElement , не считаются символами.
Каждый 16-разрядный символ Юникода внутри текстового Run элемента.
Текстовый контейнер — текстовый контейнер — это элемент, который формирует конечную границу для содержимого потока. позиция, указанная TextPointer всегда находится в текстовом контейнере. В настоящее время текстовый контейнер должен быть либо a FlowDocumentTextBlock, либо . Как правило, операции между TextPointer экземплярами в разных текстовых контейнерах не поддерживаются.
Документ . Содержимое в текстовом контейнере называется документом, как в IsInSameDocument методе и DocumentStartDocumentEnd свойствах.
Класс TextPointer предназначен для упрощения обхода и манипуляции с содержимым, представленным элементами потока Windows Presentation Foundation (WPF), в целом такие элементы являются производными.TextElement Некоторые из операций, которые TextPointer упрощают, включают следующие:
Выполните порядковое сравнение текущей позиции со второй указанной позицией. См. CompareTo метод.
Определите тип содержимого, соседнего с текущей позицией в указанном направлении. См. GetPointerContext метод и TextPointerContext перечисление.
TextElement Получите области или рядом с текущей позицией. См Paragraph . и GetAdjacentElement метод.
Получите текстовый контейнер, охватывающий текущий документ. См. Parent свойство.
Получите указанное число символов выше или после текущей позиции. См. GetTextInRun метод.
Вставьте строку символов в текущей позиции. См. InsertTextInRun метод.
Найдите границы строк в содержимом. См. GetLineStartPosition метод и IsAtLineStartPosition свойство.
Перевод между TextPointer позициями и смещениями символов в содержимое. См. инструкции GetOffsetToPosition и GetPositionAtOffset методы.
Выполнение визуального TextPointer тестирования попадания путем преобразования между положением и Point представлением относительных координат.
Найдите рядом позицию вставки или проверьте, является ли текущая позиция позицией вставки. GetInsertionPosition См. методы и GetNextInsertionPositionIsAtInsertionPosition свойства.
Позиция и LogicalDirection указанная TextPointer объектом неизменяемая. Когда содержимое редактируется или изменяется, позиция, указанная не TextPointer изменяется относительно окружающего текста; вместо смещения этой позиции с начала содержимого корректируется соответствующим образом, чтобы отразить новую относительную позицию в содержимом. Например, позиция TextPointer в начале данного абзаца продолжает указывать на начало этого абзаца, даже если содержимое вставляется или удаляется до или после абзаца.
Класс TextPointer не предоставляет открытых конструкторов. Экземпляр TextPointer создается с помощью свойств или методов других объектов (включая другие TextPointer объекты). В следующем списке приведены несколько примеров методов и свойств, которые создают и возвращают объект TextPointer. Этот список не является исчерпывающим:
TextElementИз : ContentStart, , ContentEndElementStartи ElementEnd.
Из (текстового TextBlock контейнера): ContentStartContentEndи GetPositionFromPoint.
Из (текстового FlowDocument контейнера): ContentStartи ContentEnd
Из существующего TextPointer: DocumentStart, DocumentEnd, GetNextInsertionPositionи GetPositionAtOffset.
Свойства
| Имя | Описание |
|---|---|
| DocumentEnd |
TextPointer Возвращает содержимое в текстовом контейнере, связанном с текущей позицией. |
| DocumentStart |
TextPointer Возвращает в начале содержимого в текстовом контейнере, связанном с текущей позицией. |
| HasValidLayout |
Возвращает значение, указывающее, имеет ли текстовый контейнер, связанный с текущей позицией, допустимый (up-to-date) макет. |
| 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, Int32) |
TextPointer Возвращает к началу строки, указанной относительно текущегоTextPointer, и сообщает, сколько строк пропущено. |
| GetLineStartPosition(Int32) |
TextPointer Возвращает к началу строки, указанной относительно текущегоTextPointer. |
| GetNextContextPosition(LogicalDirection) |
Возвращает указатель на следующий символ в указанном логическом направлении. |
| GetNextInsertionPosition(LogicalDirection) |
Возвращает следующую TextPointer позицию вставки в указанном логическом направлении. |
| GetOffsetToPosition(TextPointer) |
Возвращает количество символов между текущим TextPointer и вторым заданным TextPointer. |
| GetPointerContext(LogicalDirection) |
Возвращает индикатор категории для содержимого, соседнего с текущим TextPointer в указанном логическом направлении. |
| GetPositionAtOffset(Int32, LogicalDirection) |
TextPointer Возвращает позицию, указанную указанным смещением, в символах с начала текущего TextPointer и в указанном направлении. |
| GetPositionAtOffset(Int32) |
TextPointer Возвращает положение, указанное смещением, в символах с начала текущегоTextPointer. |
| GetTextInRun(LogicalDirection, Char[], Int32, Int32) |
Копирует указанное максимальное количество символов из любого соседнего текста в указанном направлении в указанный массив символов, предоставленный вызывающим. |
| GetTextInRun(LogicalDirection) |
Возвращает строку, содержащую любой текст, смежный с текущим TextPointer в указанном логическом направлении. |
| GetTextRunLength(LogicalDirection) |
Возвращает число символов Юникода между текущим TextPointer и следующим нетекстовый символом в указанном логическом направлении. |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| InsertLineBreak() |
Вставляет разрыв строки в текущей позиции. |
| InsertParagraphBreak() |
Вставляет разрыв абзаца в текущей позиции. |
| InsertTextInRun(String) |
Вставляет указанный текст в текст Run в текущей позиции. |
| IsInSameDocument(TextPointer) |
Указывает, находится ли указанная позиция в том же текстовом контейнере, что и текущая позиция. |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| ToString() |
Этот тип или член поддерживает инфраструктуру Windows Presentation Foundation (WPF) и не предназначен для использования непосредственно из кода. |