TextPointer クラス

定義

FlowDocument 内または TextBlock 内の位置を表します。Represents a position within a FlowDocument or 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

次の例では、をTextPointer使用して、指定したテキストコンテナー内の最初Runの要素の内部にある位置を検索する方法を示します。The following example demonstrates how to use a TextPointer to find a position just inside of the first Run element in a specified text container.

// 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して単純な検索アルゴリズムを実装しています。The following example implements a simplistic find algorithm using TextPointer facilities.

// 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には、次の用語が導入されています。The TextPointer class introduces the following terminology:

  • Position-本質的に、 TextPointerは常にコンテンツ内の位置を指します。Position - Inherently, a TextPointer always points to a position in content. このような位置は、コンテンツ内の文字の間、またはコンテンツの構造を定義するフローコンテンツ要素タグの間にあります。Such positions either fall between characters in the content, or between flow content element tags that define structure for the content.

  • 現在の位置-はTextPointer常に位置を示しているため、をTextPointer使用して実行できる操作の多くは、 TextPointerによって現在ポイントされている位置を基準としています。によっTextPointer現在位置として示される位置。Current Position - Because a TextPointer always indicates a position, and because many of the operations that can be performed through a TextPointer are relative to the position currently pointed to by the TextPointer, it makes sense to simply refer to the position indicated by a TextPointer as the current position.

  • 挿入位置-挿入位置は、関連付けられているコンテンツのセマンティックルールを破壊することなく、新しいコンテンツを追加できる位置です。Insertion Position - An insertion position is a position where new content may be added without breaking any semantic rules for the associated content. 実際には、挿入位置は、キャレットが配置されているコンテンツ内の任意の場所にあります。In practice, an insertion position is anywhere in content where a caret may be positioned. 挿入位置ではないTextPointer有効な位置の例として、隣接Paragraphする2つのタグ (つまり、前の段落の終了タグと次の段落の開始タグの間) の位置があります。An example of a valid TextPointer position that is not an insertion position is the position between two adjacent Paragraph tags (that is, between the closing tag of the preceding paragraph and the opening tag of the next paragraph).

  • シンボル-シンボルに関連するTextPointer操作のために、次のいずれかがシンボルであると見なされます。Symbol - For the purposes of TextPointer operations that involve symbols, any of the following is considered to be a symbol:

    • TextElement要素の開始タグまたは終了タグ。An opening or closing tag for a TextElement element.

    • またはUIElement InlineUIContainer内に含まれる要素。 BlockUIContainerA UIElement element contained within an InlineUIContainer or BlockUIContainer. このようUIElementなは常に1つの記号としてカウントされることに注意しUIElementてください。に含まれる追加のコンテンツまたは要素は、シンボルとしてカウントされません。Note that such a UIElement is always counted as exactly one symbol; any additional content or elements contained by the UIElement are not counted as symbols.

    • UnicodeUnicode テキストRun要素内の各16ビット文字。Each 16-bit UnicodeUnicode character inside of a text Run element.

  • テキストコンテナー-テキストコンテナーは、フローコンテンツの最終的な境界線を形成する要素です。によってTextPointer示される位置は、常にテキストコンテナー内にあります。Text Container - A text container is the element that forms the ultimate border for the flow content at hand; the position indicated by a TextPointer always falls within a text container. 現在、テキストコンテナーはFlowDocumentまたはのTextBlockいずれかである必要があります。Currently, a text container must be either a FlowDocument or a TextBlock. 一般に、異なるテキストTextPointerコンテナー内のインスタンス間の操作はサポートされていません。Generally speaking, operations between TextPointer instances in different text containers are not supported.

  • ドキュメント- IsInSameDocument DocumentStart ** メソッド、プロパティ、プロパティなど、テキストコンテナー内のコンテンツをドキュメントと呼びDocumentEndます。Document - The content in a text container is referred to as a document, as in the IsInSameDocument method and the DocumentStart and DocumentEnd properties.

クラスは、フローコンテンツ要素によってWindows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)表されるコンテンツの検査と操作を容易にすることを目的としてTextElementいます。一般に、このような要素はから派生します。 TextPointerThe TextPointer class is intended to facilitate traversal and manipulation of content that is represented by Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) flow content elements; in general, such elements derive from TextElement. 次のような操作TextPointerを簡単に行うことができます。Some of the operations that TextPointer facilitates include the following:

オブジェクトによっLogicalDirectionて示される位置とは変更できません。 TextPointerThe position and LogicalDirection indicated by a TextPointer object are immutable. コンテンツの編集時または変更時に、によっTextPointerて示される位置は、周囲のテキストに対して相対的に変更されることはありません。代わりに、コンテンツの先頭からの位置のオフセットは、の新しい相対位置を反映するように調整されます。情報.When content is edited or modified, the position indicated by a TextPointer does not change relative to the surrounding text; rather the offset of that position from the beginning of content is adjusted correspondingly to reflect the new relative position in content. たとえばTextPointer 、特定の段落の先頭の位置を示すは、段落の前または後にコンテンツが挿入または削除された場合でも、その段落の先頭をポイントし続けます。For example, a TextPointer that indicates a position at the beginning of a given paragraph continues to point to the beginning of that paragraph even when content is inserted or deleted before or after the paragraph.

クラスTextPointerは、パブリックコンストラクターを提供しません。The TextPointer class does not provide any public constructors. TextPointerインスタンスは、他のオブジェクト (他TextPointerのオブジェクトを含む) のプロパティまたはメソッドを使用して作成されます。An instance of TextPointer is created by using properties or methods of other objects (including other TextPointer objects). 次の一覧に、をTextPointer作成して返すメソッドとプロパティの例をいくつか示します。The following list provides a few examples of methods and properties that create and return a TextPointer. この一覧は完全ではありません。This list is not exhaustive:

プロパティ

DocumentEnd

現在の位置に関連付けられているテキスト コンテナーのコンテンツの末尾にある TextPointer を取得します。Gets a TextPointer at the end of content in the text container associated with the current position.

DocumentStart

現在の位置に関連付けられているテキスト コンテナーのコンテンツの先頭にある TextPointer を取得します。Gets a TextPointer at the beginning of content in the text container associated with the current position.

HasValidLayout

現在の位置に関連付けられているテキスト コンテナーに有効な (最新の) レイアウトがあるかどうかを示す値を取得します。Gets a value that indicates whether the text container associated with the current position has a valid (up-to-date) layout.

IsAtInsertionPosition

現在の位置が挿入位置かどうかを示す値を取得します。Gets a value that indicates whether the current position is an insertion position.

IsAtLineStartPosition

現在の位置が行頭にあるかどうかを示す値を取得します。Gets a value that indicates whether the current position is at the beginning of a line.

LogicalDirection

現在の位置に関連付けられている論理方向を取得します。論理方向は、現在の位置に関連付けられているコンテンツのあいまいさを解消するために使用されます。Gets the logical direction associated with the current position which is used to disambiguate content associated with the current position.

Paragraph

現在の位置のスコープとなる段落を取得します (存在する場合)。Gets the paragraph that scopes the current position, if any.

Parent

現在の位置のスコープとなる論理上の親を取得します (存在する場合)。Gets the logical parent that scopes the current position.

メソッド

CompareTo(TextPointer)

現在の TextPointer と指定された 2 つ目の TextPointer によって指定される位置の順序を比較します。Performs an ordinal comparison between the positions specified by the current TextPointer and a second specified TextPointer.

DeleteTextInRun(Int32)

現在の TextPointer で示される位置から指定された文字数を削除します。Deletes the specified number of characters from the position indicated by the current TextPointer.

Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(継承元 Object)
GetAdjacentElement(LogicalDirection)

指定された論理方向で現在の TextPointer に隣接する要素を返します (存在する場合)。Returns the element, if any, that borders the current TextPointer in the specified logical direction.

GetCharacterRect(LogicalDirection)

指定した論理方向で現在の Rect に隣接するコンテンツの境界ボックス (TextPointer) を返します。Returns a bounding box (Rect) for content that borders the current TextPointer in the specified logical direction.

GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(継承元 Object)
GetInsertionPosition(LogicalDirection)

指定した論理方向の最も近い挿入位置への TextPointer を返します。Returns a TextPointer to the closest insertion position in the specified logical direction.

GetLineStartPosition(Int32)

現在の TextPointer の位置に対する相対位置で指定した行の先頭にある TextPointer を返します。Returns a TextPointer to the beginning of a line that is specified relative to the current TextPointer.

GetLineStartPosition(Int32, Int32)

現在の TextPointer の位置に対する相対位置で指定した行の先頭にある TextPointer を返し、スキップされた行数を通知します。Returns a TextPointer to the beginning of a line that is specified relative to the current TextPointer, and reports how many lines were skipped.

GetNextContextPosition(LogicalDirection)

指定された論理方向の次のシンボルへのポインターを返します。Returns a pointer to the next symbol in the specified logical direction.

GetNextInsertionPosition(LogicalDirection)

指定された論理方向の次の挿入位置への TextPointer を返します。Returns a TextPointer to the next insertion position in the specified logical direction.

GetOffsetToPosition(TextPointer)

現在の TextPointer と指定した 2 つ目の TextPointer の間にあるシンボルの数を返します。Returns the count of symbols between the current TextPointer and a second specified TextPointer.

GetPointerContext(LogicalDirection)

指定された論理方向で現在の TextPointer に隣接するコンテンツのカテゴリ インジケーターを返します。Returns a category indicator for the content adjacent to the current TextPointer in the specified logical direction.

GetPositionAtOffset(Int32)

現在の TextPointer の先頭からの指定されたオフセット (シンボル単位) が示す位置への TextPointer を返します。Returns a TextPointer to the position indicated by the specified offset, in symbols, from the beginning of the current TextPointer.

GetPositionAtOffset(Int32, LogicalDirection)

指定された方向に、現在の TextPointer の先頭からの指定されたオフセット (シンボル単位) が示す位置への TextPointer を返します。Returns a TextPointer to the position indicated by the specified offset, in symbols, from the beginning of the current TextPointer and in the specified direction.

GetTextInRun(LogicalDirection)

指定された論理方向で現在の TextPointer に隣接するテキストを格納する文字列を返します。Returns a string containing any text adjacent to the current TextPointer in the specified logical direction.

GetTextInRun(LogicalDirection, Char[], Int32, Int32)

指定された方向の隣接するテキストから、指定された最大数の文字を、呼び出し元が用意した文字配列にコピーします。Copies the specified maximum number of characters from any adjacent text in the specified direction into a caller-supplied character array.

GetTextRunLength(LogicalDirection)

現在の TextPointer と、指定された論理方向の次のテキスト以外のシンボルとの間にある Unicode 文字の数を返します。Returns the number of Unicode characters between the current TextPointer and the next non-text symbol, in the specified logical direction.

GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(継承元 Object)
InsertLineBreak()

現在の位置に改行を挿入します。Inserts a line break at the current position.

InsertParagraphBreak()

現在の位置に段落の区切りを挿入します。Inserts a paragraph break at the current position.

InsertTextInRun(String)

現在の位置のテキスト Run に、指定されたテキストを挿入します。Inserts the specified text into the text Run at the current position.

IsInSameDocument(TextPointer)

指定された位置が現在の位置と同じテキスト コンテナーに含まれているかどうかを示します。Indicates whether the specified position is in the same text container as the current position.

MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(継承元 Object)
ToString()

この型またはメンバーは、Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) インフラストラクチャをサポートします。コードから直接使用するためのものではありません。This type or member supports the Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) infrastructure and is not intended to be used directly from your code.

適用対象

こちらもご覧ください