다음을 통해 공유


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

예제

다음 예제에서는 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 위치의 예는 인접한 두 Paragraph 태그(즉, 이전 단락의 닫는 태그와 다음 단락의 여는 태그 사이) 사이의 위치입니다.

  • 기호 - 기호를 포함하는 TextPointer 작업을 위해 다음 중 하나는 기호간주됩니다.

    • TextElement 요소에 대한 여는 태그 또는 닫는 태그입니다.

    • InlineUIContainer 또는 BlockUIContainer내에 포함된 UIElement 요소입니다. 이러한 UIElement 항상 정확히 하나의 기호로 계산됩니다. UIElement 포함된 추가 콘텐츠 또는 요소는 기호로 계산되지 않습니다.

    • 텍스트 Run 요소 내의 각 16비트 유니코드 문자입니다.

  • 텍스트 컨테이너 - 텍스트 컨테이너 현재 흐름 콘텐츠의 최종 테두리를 형성하는 요소입니다. TextPointer 표시된 위치는 항상 텍스트 컨테이너 내에 있습니다. 현재 텍스트 컨테이너는 FlowDocument 또는 TextBlock. 일반적으로 서로 다른 텍스트 컨테이너의 TextPointer 인스턴스 간의 작업은 지원되지 않습니다.

  • 문서 - 텍스트 컨테이너의 콘텐츠를 IsInSameDocument 메서드 및 DocumentStartDocumentEnd 속성과 같이 문서이라고 합니다.

TextPointer 클래스는 WPF(Windows Presentation Foundation) 흐름 콘텐츠 요소로 표현되는 콘텐츠의 순회 및 조작을 용이하게 하기 위한 것입니다. 일반적으로 이러한 요소는 TextElement파생합니다. TextPointer 용이하게 하는 작업 중 일부는 다음과 같습니다.

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 텍스트가 아닌 다음 기호 사이의 유니코드 문자 수를 지정된 논리적 방향으로 반환합니다.

GetType()

현재 인스턴스의 Type 가져옵니다.

(다음에서 상속됨 Object)
InsertLineBreak()

현재 위치에 줄 바꿈을 삽입합니다.

InsertParagraphBreak()

현재 위치에 단락 나누기를 삽입합니다.

InsertTextInRun(String)

지정한 텍스트를 현재 위치의 텍스트 Run 삽입합니다.

IsInSameDocument(TextPointer)

지정된 위치가 현재 위치와 동일한 텍스트 컨테이너에 있는지 여부를 나타냅니다.

MemberwiseClone()

현재 Object단순 복사본을 만듭니다.

(다음에서 상속됨 Object)
ToString()

이 형식 또는 멤버는 WPF(Windows Presentation Foundation) 인프라를 지원하며 코드에서 직접 사용할 수 없습니다.

적용 대상

추가 정보