TextPointer 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
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 사용하여 지정된 텍스트 컨테이너의 첫 번째 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 메서드 및 DocumentStart 및 DocumentEnd 속성과 같이 문서이라고 합니다.
TextPointer 클래스는 WPF(Windows Presentation Foundation) 흐름 콘텐츠 요소로 표현되는 콘텐츠의 순회 및 조작을 용이하게 하기 위한 것입니다. 일반적으로 이러한 요소는 TextElement파생합니다. TextPointer 용이하게 하는 작업 중 일부는 다음과 같습니다.
지정된 두 번째 위치를 사용하여 현재 위치의 서수 비교를 수행합니다. CompareTo 메서드를 참조하세요.
지정된 방향으로 현재 위치에 인접한 콘텐츠 형식을 확인합니다. GetPointerContext 메서드 및 TextPointerContext 열거형을 참조하세요.
범위가 지정되거나 현재 위치에 인접한 TextElement 가져옵니다. Paragraph 및 GetAdjacentElement 메서드를 참조하세요.
현재 문서의 범위를 지정하는 텍스트 컨테이너를 가져옵니다. Parent 속성을 참조하세요.
현재 위치 앞이나 다음의 지정된 문자 수를 가져옵니다. GetTextInRun 메서드를 참조하세요.
현재 위치에 문자 문자열을 삽입합니다. InsertTextInRun 메서드를 참조하세요.
콘텐츠에서 줄 경계를 찾습니다. GetLineStartPosition 메서드 및 IsAtLineStartPosition 속성을 참조하세요.
TextPointer 위치와 기호 오프셋 간을 콘텐츠로 변환합니다. GetOffsetToPosition 및 GetPositionAtOffset 메서드를 참조하세요.
TextPointer 위치와 상대 좌표를 나타내는 Point 간에 변환하여 시각적 적중 테스트를 수행합니다.
가까운 삽입 위치를 찾거나 현재 위치가 삽입 위치인지 확인합니다. GetInsertionPosition 및 GetNextInsertionPosition 메서드와 IsAtInsertionPosition 속성을 참조하세요.
TextPointer 개체로 표시된 위치 및 LogicalDirection 변경할 수 없습니다. 콘텐츠를 편집하거나 수정할 때 TextPointer 표시되는 위치는 주변 텍스트를 기준으로 변경되지 않습니다. 오히려 콘텐츠의 시작 부분에서 해당 위치의 오프셋은 콘텐츠의 새 상대 위치를 반영하도록 그에 맞게 조정됩니다. 예를 들어 지정된 단락의 시작 부분에 있는 위치를 나타내는 TextPointer 콘텐츠가 단락 앞이나 뒤에 삽입되거나 삭제된 경우에도 해당 단락의 시작을 계속 가리킵니다.
TextPointer 클래스는 공용 생성자를 제공하지 않습니다. TextPointer 인스턴스는 다른 개체(다른 TextPointer 개체 포함)의 속성 또는 메서드를 사용하여 만들어집니다. 다음 목록에서는 TextPointer만들고 반환하는 메서드 및 속성의 몇 가지 예를 제공합니다. 이 목록은 완전하지 않습니다.
TextElement: ContentStart, ContentEnd, ElementStart및 ElementEnd.
TextBlock(텍스트 컨테이너): ContentStart, ContentEnd및 GetPositionFromPoint.
FlowDocument(텍스트 컨테이너): ContentStart및 ContentEnd
기존 TextPointerDocumentStart, DocumentEnd, GetNextInsertionPosition및 GetPositionAtOffset.
속성
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) 인프라를 지원하며 코드에서 직접 사용할 수 없습니다. |
적용 대상
추가 정보
.NET