共用方式為


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)

針對以指定邏輯方向框線目前 TextPointer 的內容,傳回周框方塊 (Rect)。

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) 基礎結構,並不適合直接從您的程式代碼使用。

適用於

另請參閱