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

示例

下面的示例演示如何使用 a 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 。 目前,文本容器必须是 FlowDocument 一个或一个 TextBlock。 一般来说,不支持不同文本容器中的实例之间的 TextPointer 操作。

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

此类TextPointer旨在方便遍历和操作由 Windows Presentation Foundation (WPF) 流内容元素表示的内容的遍历和操作;通常,此类元素派生自 TextElement。 有助于执行以下操作的一些操作 TextPointer 包括:

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

TextPointer 类不提供任何公共构造函数。 通过使用其他对象的属性或方法创建实例 TextPointer , (包括其他 TextPointer 对象) 。 以下列表提供了创建和返回 a 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 与指定逻辑方向上的下一个非文本符号之间的 Unicode 字符数。

GetType()

获取当前实例的 Type

(继承自 Object)
InsertLineBreak()

在当前位置插入一个换行符。

InsertParagraphBreak()

在当前位置插入一个分段符。

InsertTextInRun(String)

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

IsInSameDocument(TextPointer)

指示指定位置与当前位置是否位于相同的文本容器内。

MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
ToString()

此类型或成员支持 Windows Presentation Foundation (WPF) 基础结构,并且不应在代码中直接使用。

适用于

另请参阅