TextPointer 类

定义

表示 FlowDocumentTextBlock中的位置。

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 标记之间的位置(即,在上一段的结束标记和下一段的开始标记之间)。

  • 符号 - 出于涉及符号的 TextPointer 操作的目的,以下任何一项被视为 符号

  • 文本容器 - 文本容器 是构成手头流内容的最终边框的元素;TextPointer 指示的位置始终位于文本容器中。 目前,文本容器必须是 FlowDocumentTextBlock。 一般来说,不支持不同文本容器中 TextPointer 实例之间的操作。

  • 文档 - 文本容器中的内容称为 文档,如 IsInSameDocument 方法和 DocumentStartDocumentEnd 属性。

TextPointer 类旨在促进 Windows Presentation Foundation (WPF) 流内容元素表示的内容的遍历和操作;通常,此类元素派生自 TextElementTextPointer 促进的一些操作包括:

TextPointer 对象指示的位置和 LogicalDirection 是不可变的。 编辑或修改内容时,TextPointer 指示的位置不会相对于周围的文本而更改;相反,相应调整该位置与内容开头的偏移量,以反映内容中的新相对位置。 例如,指示给定段落开头的位置的 TextPointer 仍指向该段落的开头,即使内容在段落之前或之后插入或删除。

TextPointer 类不提供任何公共构造函数。 使用其他对象的属性或方法(包括其他 TextPointer 对象)创建 TextPointer 实例。 以下列表提供了创建和返回 TextPointer的方法和属性的几个示例。 此列表并不详尽:

属性

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 与下一个非文本符号之间的 Unicode 字符数,以指定的逻辑方向返回。

GetType()

获取当前实例的 Type

(继承自 Object)
InsertLineBreak()

在当前位置插入换行符。

InsertParagraphBreak()

在当前位置插入段落分隔符。

InsertTextInRun(String)

将指定文本插入到当前位置的文本 Run

IsInSameDocument(TextPointer)

指示指定位置是否与当前位置位于同一文本容器中。

MemberwiseClone()

创建当前 Object的浅表副本。

(继承自 Object)
ToString()

此类型或成员支持 Windows Presentation Foundation (WPF) 基础结构,不打算直接从代码使用。

适用于

另请参阅