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 тегами (т. е. между закрывающим тегом предыдущего абзаца и открывающим тегом следующего абзаца).
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. Этот список не является исчерпывающим:
Из : TextElementContentStart, ContentEnd, ElementStartи ElementEnd.
Из (текстового TextBlock контейнера): ContentStartи ContentEndGetPositionFromPoint.
Из (текстового FlowDocument контейнера): ContentStartи ContentEnd
Из существующегоTextPointer: DocumentStart, , GetNextInsertionPositionDocumentEndи GetPositionAtOffset.
Свойства
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) и не предназначен для непосредственного использования из кода. |